打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
自学R语言(八)-plyr包的学习
这个包的设计思想是Split-Apply-Combine概念就是:把大问题分割成若干小的问题,然后再利用apply去处理,再将处理之后的问题整合起来,就是combine的过程。这样一个大的问题就解决了。
下表为plyr包的函数左侧是输入,上方是输出结果:
Array Data frame list
array aaply adply alply
Data frame daply ddply dlply
list laply ldply llply
# 首先清除环境变量的内容,和绘图区的内容# 然后再安装plyr包,使用的依然是清华的镜像> rm(list=ls())> dev.off()> install.packages("plyr") # 安装plyr包
>library(plyr) # 加载plyr包
一 按照输入格式来划分
​​​1、a*ply的语法:
aaply(.data=  , .margin= 1 或者2,.fun=)
由于该函数的输入是array,所以其中margin的值为1的话代表是对行进行操作使用后面的函数。要是2的话表示是对列进行后面的操作。
aaply(.data= , .margin= 1 或 2, .fun=, progress="text")
后面的progress为TRUE时表示不仅可以对数据进行相应的函数处理,而且还会显示已完成的进度百分比。
y <- matrix(c(1:20), nrow = 4, ncol = 5 ,byrow = TRUE)
> y
[,1] [,2] [,3] [,4] [,5]
[1,]    1    2    3    4    5
[2,]    6    7    8    9   10
[3,]   11   12   13   14   15
[4,]   16   17   18   19   20
> aaply(.data = y, .margins = 2, .fun = mean)
1    2    3    4    5
8.5  9.5 10.5 11.5 12.5
aaply(.data = y, .margins = 2, .fun = mean, .progress = "text")
|====================================================================================| 100% #可以显示出具体的进度条
1    2    3    4    5
8.5  9.5 10.5 11.5 12.5
2、d*ply的语法:
ddply(.data=, .variables, .fun= , .progress="text")
由于输入的是data frame,所以每一列就是一个变量,利用变量名为划分的标准提取数据,然后再利用后面的函数,按照每个变量进行计算。可以使用以下的数据进行具体的演示。
variables表示按照变量名进行划分。
manager<- c(1,2,3,4,5)
data <- c("10/02/03","10/02/08","12/10/09","10/12/10","11/10/11")
country <- c("US","US","UK","UK","UK")
gender <- c("M","F","F","M","F")
age <- c(32,34,45,27,99)
q1 <- c(5,3,3,3,2)
q2 <- c(4,5,5,3,2)
q3 <- c(5,2,5,4,1)
q4 <- c(5,5,5,NA,2)
q5 <- c(5,5,2,NA,1)
survey <- data.frame(manager,data,country,gender,age,q1,q2,q3,q4,q5)
survey  #自己构建数据框
manager     data country gender age q1 q2 q3 q4 q5
1       1 10/02/03      US      M  32  5  4  5  5  5
2       2 10/02/08      US      F  34  3  5  2  5  5
3       3 12/10/09      UK      F  45  3  5  5  5  2
4       4 10/12/10      UK      M  27  3  3  4 NA NA
5       5 11/10/11      UK      F  99  2  2  1  2  1
q1mean<-function(survey)
{qmean=mean(survey[,6])
return(qmean)
}  #自己定义函数对q1进行取平均值
ddply(.data = survey,.variables = "country",.fun = q1mean)#然后使用ddply就可以先按照country进行分类,待分好类之后就可以计算每一类中的q1的平均值了,同时输出的也是data.frame。
country  V1
1      UK 3.2
2      US 3.2
#如下也可以按照“gender”来分类,然后计算每一类中q1的平均值。
> ddply(.data = survey,.variables = "gender",.fun = q1mean)
gender  V1
1      F 3.2
2      M 3.2
ddply(.data = survey,.variables = "gender",.fun = q1mean, .progress="text")
|====================================================================================| 100%  #同样使用.progress=“text”函数可以显示具体的运行进度条
gender       V1
1      F 2.666667
2      M 4.000000
3、l*ply语法:
l*ply(.data, .fun= , .progress="text")列表类型的数据是最简单的数据类型,已经被分割成了一个个的元素,所以不用使用参数来对数据进行分割,直接就可以使用函数对其进行操作。
我们使用以下的例子来进行演示
> a<- c(1,2,3,4,5,5)
> b<- c(4,5,8,9,9)
> c <- c(5,3,5,25,7)
> list<-list(a,b,c)
> list #我们自己构建一个list进行演示
[[1]]
[1] 1 2 3 4 5 5
[[2]]
[1] 4 5 8 9 9
[[3]]
[1]  5  3  5 25  7
> llply(list,.fun=mean) #输出的为list
[[1]]
[1] 3.333333
[[2]]
[1] 7
[[3]]
[1] 9
> laply(list,.fun = mean)  #输出的为array
[1] 3.333333 7.000000 9.000000
> ldply(list,.fun = mean())
> ldply(list,.fun = mean) #输出的为data frame
V1
1 3.333333
2 7.000000
3 9.000000
二 按照输出格式来划分
*aply #输出数组
*dply #输出数据框
*lply #输出列表
plyr package study
caolong
2019年4月8日
rm(list = ls()) #首先清除所有环境变量#m*ply函数生成符合正态分布的数据#语法:m*ply(a matrix, FUN)library(plyr)## Warning: package 'plyr' was built under R version 3.5.3data <- data.frame(n=c(10,100,50), mean= c(5,5,10), sd=c(1,2,1)) #使用data.frame函数生成数据框data## n mean sd## 1 10 5 1## 2 100 5 2## 3 50 10 1mlply(data,rnorm) #使用mlply函数生成一个符合正态分布的list## $`1`## [1] 5.597796 7.195703 5.201666 3.625995 4.814584 2.362120 4.866147## [8] 4.022663 4.500451 3.636177## ## $`2`## [1] 1.9478780 5.1039141 2.8753984 5.4494186 5.9856087 2.7933839 6.7331671## [8] 5.1006823 7.8709815 6.7700404 4.9617848 3.1754304 4.0956810 5.3679891## [15] 5.4811376 3.9686211 4.7402984 6.0928134 2.4654921 6.3476626 5.1045086## [22] 3.0376951 3.9948495 5.3368253 3.3965233 4.1613932 1.9438448 2.1934258## [29] 4.4024520 7.1606552 3.7615988 5.0007089 6.7035107 6.2044272 8.7627895## [36] 3.7456399 6.3844307 3.3049967 1.8455469 5.4843671 3.9069971 3.0727508## [43] 5.9285462 4.5894332 6.8255214 6.5141527 7.0079097 4.6446679 3.7748855## [50] 7.5832469 4.0809141 2.3765298 2.1552834 0.3520961 7.0689219 5.6493367## [57] 5.7410027 5.8672799 5.4788270 2.3362219 1.0664801 9.1371410 6.4832810## [64] 7.2723617 3.8360642 4.8793498 7.1864398 3.9050459 5.2468229 4.3835202## [71] 4.5147669 4.9162064 6.0501520 6.9145365 3.3210283 3.3686682 3.8419416## [78] 6.5645068 8.0604067 4.6412432 5.0444570 3.9599099 4.1907990 8.0414810## [85] 8.3723589 4.8880244 1.6429067 2.3683727 6.5789226 2.7923701 6.4046833## [92] 5.8970652 4.9636240 2.3084549 6.1580852 5.7702075 4.7147424 7.0234124## [99] 4.3474121 8.5981083## ## $`3`## [1] 10.763513 8.981798 9.974897 10.608786 9.086705 8.150596 10.144277## [8] 9.372221 10.947032 10.440826 9.969385 8.164854 9.967190 8.749874## [15] 10.439944 8.880931 11.680774 11.262997 12.544181 8.860317 10.390592## [22] 10.907018 9.777402 9.687425 11.580891 9.826234 9.876026 11.089291## [29] 10.256616 8.539867 9.508959 9.919084 9.330837 10.591424 10.193712## [36] 11.516401 7.461234 10.382400 8.926586 11.682932 11.027657 10.659039## [43] 10.544077 11.162872 7.193255 8.529853 11.154706 10.122473 9.786632## [50] 11.596915## ## attr(,"split_type")## [1] "array"## attr(,"split_labels")## n mean sd## 1 10 5 1## 2 100 5 2## 3 50 10 1#使用each函数,就是对同一组数据使用多个函数进行处理#例如:a <- c(1,5,4,9,7,35,8,7,5,56)FUN <- function(x) {c(max=max(x), min=min(x),mean= mean(x))}FUN(a) ## max min mean ## 56.0 1.0 13.7#此时,我们可以直接使用plyr包中的each函数很直接的得到以上复杂函数的结果,示例如下:each(max,min,mean)(a)## max min mean ## 56.0 1.0 13.7each(length,min,mean,var)(rnorm(100))#总之,each函数必须得是将函数写在前面的括号内,然后将作用的对象写在后面的括号## length min mean var ## 100.0000000 -2.6024126 -0.1226308 1.0733330knitr::opts_chunk$set(echo = TRUE)colwise 函数的学习
library(plyr)#colwise函数是将应用于行的函数应用在列上#接下来,我们自定义函数来统计在baseball数据中的na个数head(baseball)## id year stint team lg g ab r h X2b X3b hr rbi sb cs bb so## 4 ansonca01 1871 1 RC1 25 120 29 39 11 3 0 16 6 2 2 1## 44 forceda01 1871 1 WS3 32 162 45 45 9 4 0 29 8 0 4 0## 68 mathebo01 1871 1 FW1 19 89 15 24 3 1 0 10 2 1 2 0## 99 startjo01 1871 1 NY2 33 161 35 58 5 1 1 34 4 2 3 0## 102 suttoez01 1871 1 CL1 29 128 35 45 3 7 3 23 3 1 1 0## 106 whitede01 1871 1 CL1 29 146 40 47 6 5 1 21 2 2 4 1## ibb hbp sh sf gidp## 4 NA NA NA NA NA## 44 NA NA NA NA NA## 68 NA NA NA NA NA## 99 NA NA NA NA NA## 102 NA NA NA NA NA## 106 NA NA NA NA NAnmissing<- function(x) {sum(is.na(x))}nmissing(baseball)#此时,我们会得到baseball中所有的na个数,这个是按照行统计然后对其进行累加,得到的总和## [1] 27619colwise(nmissing)(baseball)# 此时,我们得到每一列中含有的na个数## id year stint team lg g ab r h X2b X3b hr rbi sb cs bb so ibb hbp## 1 0 0 0 0 0 0 0 0 0 0 0 0 12 250 4525 0 1305 7528 377## sh sf gidp## 1 960 7390 5272#同时,我们还可以联合使用ddply函数一起使用,先按照variables进行分类,然后查看每一分类中的具体的na个数colwise 函数与ddply函数一起使用
ddply(baseball,.(year),colwise(nmissing))## year id stint team lg g ab r h X2b X3b hr rbi sb cs bb so ibb hbp sh## 1 1871 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 7 7## 2 1872 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 13 13 13## 3 1873 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 13 13 13## 4 1874 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 15 15## 5 1875 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 17 17 17## 6 1876 0 0 0 0 0 0 0 0 0 0 0 0 15 15 0 0 15 15 15#同时,我们还可以联合使用ddply函数一起使用,先按照variables进行分类,然后查看每一分类中的具体的na个数,如果想查看每一分类中具体的哪一变量中的na个数可以使用一下的函数进行实现ddply(baseball,.(year),colwise(nmissing,.(hr,sb,so)))## year hr sb so## 1 1871 0 0 0## 2 1872 0 0 0## 3 1873 0 0 0## 4 1874 0 0 0## 5 1875 0 0 0## 6 1876 0 15 0## 7 1877 0 16 0## 8 1878 0 17 0## 9 1879 0 25 0## 10 1880 0 28 0## 11 1881 0 36 0## 12 1882 0 28 7## 13 1883 0 25 13## 14 1884 0 27 26## 15 1885 0 33 17## 16 1886 0 0 20## 17 1887 0 0 21## 18 1888 0 0 20## 19 1889 0 0 0## 20 1890 0 0 11## 21 1891 0 0 0## 22 1892 0 0 0## 23 1893 0 0 0## 24 1894 0 0 0## 25 1895 0 0 0#也可以将我们指定的函数只应用到某种字符型的对象上,例如,is.charactor,is.numeric等都是可以的ddply(baseball,.(year),colwise(nmissing, is.character))## year id team lg## 1 1871 0 0 0## 2 1872 0 0 0## 3 1873 0 0 0## 4 1874 0 0 0## 5 1875 0 0 0## 6 1876 0 0 0## 7 1877 0 0 0## 8 1878 0 0 0## 9 1879 0 0 0## 10 1880 0 0 0## 11 1881 0 0 0## 12 1882 0 0 0## 13 1883 0 0 0## 14 1884 0 0 0## 15 1885 0 0 0
ddply(baseball,.(year),colwise(nmissing, is.numeric))## year stint g ab r h X2b X3b hr rbi sb cs bb so ibb hbp sh sf gidp## 1 1871 0 0 0 0 0 0 0 0 0 0 0 0 0 7 7 7 7 7## 2 1872 0 0 0 0 0 0 0 0 0 0 0 0 0 13 13 13 13 13## 3 1873 0 0 0 0 0 0 0 0 0 0 0 0 0 13 13 13 13 13## 4 1874 0 0 0 0 0 0 0 0 0 0 0 0 0 15 15 15 15 15## 5 1875 0 0 0 0 0 0 0 0 0 0 0 0 0 17 17 17 17 17## 6 1876 0 0 0 0 0 0 0 0 0 15 15 0 0 15 15 15 15 15## 7 1877 0 0 0 0 0 0 0 0 0 16 16 0 0 16 16 16 16 17## 8 1878 0 0 0 0 0 0 0 0 0 17 17 0 0 17 17 17 17 17## 9 1879 0 0 0 0 0 0 0 0 0 25 25 0 0 25 25 25 25 25## 10 1880 0 0 0 0 0 0 0 0 0 28 28 0 0 28 28 28 28 28## 11 1881 0 0 0 0 0 0 0 0 0 36 36 0 0 36 36 36 36 36## 12 1882 0 0 0 0 0 0 0 0 3 28 35 0 7 35 35 35 35 35## 13 1883 0 0 0 0 0 0 0 0 0 25 38 0 13 38 38 38 38 38## 14 1884 0 0 0 0 0 0 0 0 9 27 53 0 26 53 36 53 53 53## 15 1885 0 0 0 0 0 0 0 0 0 33 50 0 17 50 33 50 50 50## 16 1886 0 0 0 0 0 0 0 0 0 0 51 0 20 51 31 51 51 51## 17 1887 0 0 0 0 0 0 0 0 0 0 56 0 21 56 0 56 56 56## 18 1888 0 0 0 0 0 0 0 0 0 0 60 0 20 60 0 60 60 60knitr::opts_chunk$set(echo = TRUE)
arrange 函数的使用
语法:arrange(df,var1,var2….)
作用:将数据框按照变量var1,var2,…..等进行排序
参数:df为数据框,var为变量
注意:1、这样排序之后会使行名消失所以我们需要把原来的行名,加入到这个数据框里面 2、默认情况下是进行的升序排列
arrange(mtcars,wt,mpg)#我们利用此函数对mtcars进行排序先按照wt,排序再按照mpg进行排序## mpg cyl disp hp drat wt qsec vs am gear carb## 1 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2## 2 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2## 3 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1## 4 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1## 5 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2## 6 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1## 7 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1## 8 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1## 9 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4## 10 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6## 11 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2## 12 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4## 13 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2## 14 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4## 15 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2## 16 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1## 17 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2## 18 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4## 19 18.7 8360.0 175 3.15 3.440 17.02 0 0 3 2## 20 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4## 21 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1## 22 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2## 23 14.3 8360.0 245 3.21 3.570 15.84 0 0 3 4## 24 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8## 25 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3## 26 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3## 27 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4## 28 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2## 29 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3## 30 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4## 31 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4## 32 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4#原来的行名加入到这个数据框里面可以使用一下的函数去实现cars <- cbind(vehicle=row.names(mtcars),mtcars)arrange(cars,mpg,wt) #再对这个新的数据框进行排序(默认是升序排列),就会显示出原来每一行的行名## vehicle mpg cyl disp hp drat wt qsec vs am gear carb## 1 Cadillac Fleetwood 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4## 2 Lincoln Continental 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4## 3 Camaro Z28 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4## 4 Duster36014.3 8360.0 245 3.21 3.570 15.84 0 0 3 4## 5 Chrysler Imperial 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4## 6 Maserati Bora 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8## 7 AMC Javelin 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2## 8 Merc 450SLC 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3## 9 Dodge Challenger 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2## 10 Ford Pantera L 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4## 11 Merc 450SE 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3## 12 Merc 450SL 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3## 13 Merc 280C 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4## 14 Valiant 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1## 15 Hornet Sportabout 18.7 8360.0 175 3.15 3.440 17.02 0 0 3 2## 16 Merc 280 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4## 17 Pontiac Firebird 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2## 18 Ferrari Dino 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6## 19 Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4## 20 Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4## 21 Volvo 142E 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2## 22 Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1## 23 Toyota Corona 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1## 24 Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1## 25 Merc 230 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2## 26 Merc 240D 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2## 27 Porsche 914-2 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2## 28 Fiat X1-9 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1## 29 Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2## 30 Honda Civic 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2## 31 Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1## 32 Toyota Corolla 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1arrange(cars,wt,mpg,(disp))## vehicle mpg cyl disp hp drat wt qsec vs am gear carb## 1 Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2## 2 Honda Civic 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2## 3 Toyota Corolla 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1## 4 Fiat X1-9 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1## 5 Porsche 914-2 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2## 6 Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1## 7 Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1## 8 Toyota Corona 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1## 9 Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4## 10 Ferrari Dino 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6## 11 Volvo 142E 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2## 12 Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4## 13 Merc 230 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2## 14 Ford Pantera L 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4## 15 Merc 240D 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2## 16 Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1## 17 AMC Javelin 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2## 18 Merc 280C 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4## 19 Hornet Sportabout 18.7 8360.0 175 3.15 3.440 17.02 0 0 3 2## 20 Merc 280 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4## 21 Valiant 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1## 22 Dodge Challenger 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2## 23 Duster36014.3 8360.0 245 3.21 3.570 15.84 0 0 3 4## 24 Maserati Bora 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8## 25 Merc 450SL 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3## 26 Merc 450SLC 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3## 27 Camaro Z28 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4## 28 Pontiac Firebird 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2## 29 Merc 450SE 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3## 30 Cadillac Fleetwood 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4## 31 Chrysler Imperial 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4## 32 Lincoln Continental 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4knitr::opts_chunk$set(echo = TRUE)
rename函数的学习和使用
语法:raname(x,replace,warm miss= TRUE)
作用:通过名字修改名字而不是通过位置修改名字
参数:x是要操作的数据,replace是要替换的字符向量(包括新的和旧的字符向量),warm miss=TURE 表示当旧的字符不在x中是,是否显示错误提示信息,当该值为TRUE时表示显示此错误信息
a <- c("a"=1,"b"=2,"c"=3,"d"=4)#自己创建向量a然后利用这个向量演示rename的函数功能a## a b c d ## 1 2 3 4rename(a,replace = c("a"="d"))#使用d去替换a这个名称## Warning: The plyr::rename operation has created duplicates for the## following name(s): (`d`)## d b c d ## 1 2 3 4knitr::opts_chunk$set(echo = TRUE)
match函数的学习和使用
语法:match_df(x,y,on=NULL)
作用:从一个数据框提取和另外一个数据框匹配的行
参数:x是原始的需要提取的数据框,y是用来找出相同行的另外一个数据框。on是指定要来比对的变量,默认是比对两个数据框中的所有变量。
#例如我们使用baseball中的数据进行练习,head(count(baseball,"id"),5) #查看有多少个id## id freq## 1 aaronha01 23## 2 abernte02 17## 3 adairje01 15## 4 adamsba01 1sb=subset(count(baseball,"id"),freq>25)#提取id大于25的那些行,组成一个新的数据框sb## id freq## 30 ansonca01 27## 48 baineha01 27## 171 carltst01 27## 490 henderi01 29## 525 houghch01 26## 559 johnto01 28## 574 kaatji01 28## 725 mcguide01 31## 778 mulhote01 26## 805 newsobo01 29## 809 niekrph01 26## 836 oroscje01 26## 967 ryanno01 27## 1187 wilheho01 26matched <- match_df(baseball,sb,on="id")knitr::opts_chunk$set(echo = TRUE)
join函数的学习和使用
语法:join(x,y,by=“”, type=“iner”,match=“all”)
作用:联合两个数据框
参数:x,y是两个数据框,by是指定要联合的两个变量,默认值为所有的变量,type是指定要联合的方式。我们使用以下的自己构建的数据框去练习一下这个函数的使用
manager<- c(1,2,3,4,5)data <- c("10/02/03","10/02/08","12/10/09","10/12/10","11/10/11")country <- c("US","US","UK","UK","UK")gender <- c("M","F","F","M","F")age <- c(32,34,45,27,99)age2 <- c(32,27,45,27,30)q1 <- c(5,3,3,3,2)q2 <- c(4,5,5,3,2)q3 <- c(5,2,5,4,1)q4 <- c(5,5,5,NA,2)q5 <- c(5,5,2,NA,1)survey <- data.frame(manager,data,country,gender,age,q1,q2,q3,q4,q5)survey#自己构建的数据框1## manager data country gender age q1 q2 q3 q4 q5## 1 1 10/02/03 US M 32 5 4 5 5 5## 2 2 10/02/08 US F 34 3 5 2 5 5## 3 3 12/10/09 UK F 45 3 5 5 5 2## 4 4 10/12/10 UK M 27 3 3 4 NA NA## 5 5 11/10/11 UK F 99 2 2 1 2 1survey2 <-data.frame(manager,data,country,gender,age2,q1,q2)survey2#自己构建的数据框2## manager data country gender age2 q1 q2## 1 1 10/02/03 US M 32 5 4## 2 2 10/02/08 US F 27 3 5## 3 3 12/10/09 UK F 45 3 5## 4 4 10/12/10 UK M 27 3 3## 5 5 11/10/11 UK F 30 2 2join(survey,survey2,by="q1")## manager data country gender age q1 q2 q3 q4 q5 manager data## 1 1 10/02/03 US M 32 5 4 5 5 5 1 10/02/03## 2 2 10/02/08 US F 34 3 5 2 5 5 2 10/02/08## 3 2 10/02/08 US F 34 3 5 2 5 5 3 12/10/09## 4 2 10/02/08 US F 34 3 5 2 5 5 4 10/12/10## 5 3 12/10/09 UK F 45 3 5 5 5 2 2 10/02/08## 6 3 12/10/09 UK F 45 3 5 5 5 2 3 12/10/09## 7 3 12/10/09 UK F 45 3 5 5 5 2 4 10/12/10## 8 4 10/12/10 UK M 27 3 3 4 NA NA 2 10/02/08## 9 4 10/12/10 UK M 27 3 3 4 NA NA 3 12/10/09## 10 4 10/12/10 UK M 27 3 3 4 NA NA 4 10/12/10## 11 5 11/10/11 UK F 99 2 2 1 2 1 5 11/10/11## country gender age2 q2## 1 US M 32 4## 2 US F 27 5## 3 UK F 45 5## 4 UK M 27 3## 5 US F 27 5## 6 UK F 45 5## 7 UK M 27 3## 8 US F 27 5## 9 UK F 45 5## 10 UK M 27 3## 11 UK F 30 2knitr::opts_chunk$set(echo = TRUE)
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
ggplot2:数据分析与图形艺术》
R语言基础知识
R语言教程:写给高级入门者的数据打理攻略
R语言:对于数据框变量数值进行归类等(within函数使用)
R-rbind.fill|列数不一致的多个数据集“智能”合并,Get!
Data manipulation part two -Cleaning data
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服