LearningR-数据处理赏罚
Programming with select 存疑?? select_(iris_df,~Petal.Length) select_(iris_df,"Petal.Length") select_(iris_df,lazyeval::interp(~matches(x),x = ".t.")) select_(iris_df,quote(-Petal.Length),quote(-Petal.Width)) select_(iris_df,.dots = list(quote(-Petal.Length),quote(-Petal.Width))) 3.1.5 添加新变量mutate对已有罗列办数据运算并添加为新列: mtcars_df <- tbl_df(mtcars) mutate(mtcars_df,displ_l = disp / 61.0237) #transmute功效只有计较的字段 transmute(mtcars_df,displ_l = disp / 61.0237) mutate_each() 对每一列运行窗体函数。 mutate_each(iris,funs(min_rank)) plyr::mutate() 与 base::transform() 相似,上风在于可以在统一语句中对刚增进的罗列办操纵。 mutate(hflights_df,gain = ArrDelay - DepDelay,gain_per_hour = gain / (AirTime / 60) ) #而同样操纵用R自带函数 transform() 的话就会报错: transform(hflights,gain_per_hour = gain / (AirTime / 60) ) 通过data.frame有可以实现 mtcars_df <- data.frame(mtcars_df,displ_l = mtcars_df$disp / 61.0237) 3.1.6 汇总summarisesummarise(mtcars_df,mean(disp,na.rm = TRUE),n()) summarise(group_by(mtcars_df,cyl),mean(disp),m = mean(disp),sd = sd(disp)) #对每?一列运?行概述函数。 summarise_each(iris,funs(mean)) by_species <- iris %>% group_by(Species) by_species %>% summarise_each(funs(length)) by_species %>% summarise_each(funs(mean)) by_species %>% summarise_each(funs(mean),Petal.Width) by_species %>% summarise_each(funs(mean),matches("Width")) count() #计较各变量中每?一个特定值的?行数(带权重或不带权重)。 count(iris,wt = Sepal.Length) count(iris,mycount = n()) 3.1.7 tallymtcars %>% group_by(cyl,vs) %>% tally(sort = TRUE) #与下列方法沟通 mtcars %>% group_by(cyl,vs) %>% summarise(n = n()) %>% arrange(cyl,vs,n) 3.2 分组group_by当对数据集通过 group_by() 添加了分组信息后,mutate(),arrange() 和 summarise() 函数会自动对这些 tbl 类数据执行分组操纵 (R说话泛型函数的上风). summarise(mtcars_df,n(),n_distinct(gear)) summarise(group_by(mtcars_df,sd = sd(disp)) #a mutate/rename followed by a simple group_by group_by(mtcars_df,vsam = vs + am) group_by(mtcars_df,vs2 = vs) summarise(group_by(mtcars_df,cyl2=cyl),sd = sd(disp)) 另: 一些汇总时的小函数 n(): 计较个数 3.3 链式操纵(管道) %>% 或 %.%dplyr包还新引进了一个操纵符,读成then,行使时把数据名作为开头,然后依次对此数据举办多步操纵。好比: mtcars %>% group_by(cyl) %>% summarise(total = sum(disp)) %>% arrange(desc(total)) %>% head(5) (x1-x2)^2%>%sum()%>%sqrt() 按数据处理赏罚的思绪写代码,一步步深入,既易写又易读,靠近于从左到右的天然说话次序, 比拟一下用R自带函数实现的. head(arrange(summarise(group_by(mtcars,total = sum(disp)),desc(total)),5) x1 <- 1:5 x2 <- 2:6 sqrt(sum((x1-x2)^2)) 可能像这篇文章所用的要领: totals <- aggregate(. ~ cyl,data=mtcars[,c("cyl","disp")],sum) ranks <- sort.list(-totals$disp) #ranks <- order(-totals$disp) totals[ranks[1:5],] 文章里还暗示: 通过 %>% 那段代码比跑上面这段代码,运算速率晋升许多倍. 至于这个奇怪的观念会不会和 ggplot2 里的 + 毗连号一样,施展出各种奇奥的成果呢? 照旧在现实行使中多体验感觉吧. 3.5 数据匹共同并join
x <- data.frame(name = c("John","Paul","George","Ringo","Stuart","Pete"),instrument = c("guitar","bass","guitar","drums","drums")) y <- data.frame(name = c("John","Brian"),band = c("TRUE","TRUE","FALSE")) inner_join(x,y) left_join(x,y) semi_join(x,y) anti_join(x,y) full_join(x,y) right_join(x,y) 3.6 毗连数据库
3.7 操作窗体函数调动数据4. tidyrtidyr包的作者也是Hadley Wickham,与dplyr包团结行使,是reshape2包的更换。 5. 字符串处理赏罚5.1 字符个数 ncharnchar()可以或许获取字符串的长度,它和length()的功效是有区此外。 nchar(c("abc","abcd"))??? #求字符串中的字符个数,返回向量c(3,4) length(c("abc","abcd"))? #返回2,向量中元素的个数 5.2 毗连字符 pastepaste()不只可以毗连多个字符串,还可以将工具自动转换为字符串再相连,其它它还能处理赏罚向量,以是成果更强盛。 paste("fitbit",month,".jpg",sep="") paste("fitbit",1:12,sep = "") paste默认的脱离符是空格,必需指定sep=""。尚有一个collapse参数,可以把这些字符串拼成一个长字符串,而不是放在一个向量中。 paste("fitbit",1:3,sep = "",collapse = "; ") (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |