plyr包提供了多种方便的函数。在这里只简单整理里面的apply族函数。
plyr族的apply形式统一为**apply。 两个 * 可以取的字符有l,d,a,r,_ 。 二者分别代表
_ = 无输出
l = list
d= dataframe
r = replicate
a = array
例如laply意为输入list,结果按照array返回,功能类似sapply
daply输入dataframe,按照某个vector进行拆分后再运行函数,最后输出array。详情参考帮助文档。
raply,rdply,rlply,r_ply都能够将一个函数重复运行n次,再将结果按照不同方式输出。r_ply无输出结果。
> raply(5,rnorm(2)) #输出matrix
1 2
[1,] 0.3883049 -0.2169678
[2,] -1.7860011 -1.8977570
[3,] 0.3863878 -0.3025431
[4,] 0.3239897 -1.2374434
[5,] 1.6825482 1.6953424
> rdply(5,rnorm(2)) #输出dataframe
.n V1 V2
1 1 -0.8975326 -2.3684047
2 2 -0.8796698 0.4489358
3 3 -1.0913203 0.4137911
4 4 -0.1927564 0.2688524
5 5 -0.1176810 2.0811032
ddply则是tapply的进化形式。它能够将dataframe按照某些标准分拆为sub-dataframe,再运行函数,最后输出dataframe作为结果。
ddply(.data, .variables, .fun = NULL, ..., .progress = "none",
.inform = FALSE, .drop = TRUE, .parallel = FALSE, .paropts = NULL)
> ddply(Orange, # .data
.(Tree), # .variables 这里的括号里可以有多个factor
summarize, #指定function的应用范围
avg.age = mean(age), avg.circ = mean(circumference))
Tree avg.age avg.circ
1 3 922.1429 94.00000
2 1 922.1429 99.57143
3 5 922.1429 111.14286
4 2 922.1429 135.28571
5 4 922.1429 139.28571
如果在function部分指定为colwise(某函数名) , 则表示将某函数用于除了 .variables之外的所有column;这种方式较为快捷,但一次只能传递入1个函数。
如果指定为summarize,则可以更详细地指定。
> ddply(Orange, .(Tree), colwise(sd))
Tree age circumference
1 3 523.6298 42.98062
2 1 523.6298 43.29302
3 5 523.6298 58.85980
4 2 523.6298 66.32424
5 4 523.6298 71.89741