plyr包
apply把一个function作用到array或者matrix的margins(可以理解为数组的每一行或者每一列)中,返回值时vector、array、list。
简单的说,apply函数经常用来计算矩阵中行或列的均值、和值的函数.
apply(data.frame,1,fun())
上面的指令代表对矩阵b进行行计算,分别对每一行进行求和。函数涉及了三个参数:
第一个参数是指要参与计算的矩阵;
第二个参数是指按行计算还是按列计算,1——表示按行计算,2——按列计算;
第三个参数是指具体的运算参数。
plyr包属于R base packages。
XXply
第一个字母表示函数应用的对象类型,第二个字母表示函数返回值的对象类型,
字母取值有:
a: array
l: list
d: data.frame
m: multiple inputs
r: repeat multiple times
plyr包的ddply函数
第1个参数,输入数据,类型为数据框(data frame)
第2个参数,变量或者多个变量,数据框的分组字段
第3个参数,分组函数,对分组后的子集上进行计算
library(plyr)
ddply(iris, .(Species), function(x) colMeans(x[-5]))
ddply(iris, .(Species), colwise(sum))
colwise
colwise:将对vector的操作函数转换成对df中column的操作函数
操作离散数值变量
catcolwise:
numcolwise:
二、函数tapply(进行分组统计):
使用格式为:
tapply(X, INDEX, FUN = NULL, ..., simplify = TRUE)
其中X通常是一向量;INDEX是一个list对象,且该list中的每一个元素都是与X有同样长度的因子;FUN是需要计算的函数;simplify是逻辑变量,若取值为TRUE(默认值),且函数FUN的计算结果总是为一个标量值,那么函数tapply返回一个数组;若取值为FALSE,则函数tapply的返回值为一个list对象。需要注意的是,当第二个参数INDEX不是因子时,函数 tapply() 同样有效,因为必要时 R 会用 as.factor()把参数强制转换成因子。
参考: https://www.cnblogs.com/nanhao/p/6674063.html
https://www.zhihu.com/question/39843392