caolong2019年4月14日aggregate函数应该是数据处理中常用到的函数,简单说有点类似sql语言中的group by,可以按照要求把数据打组聚合,然后对聚合以后的数据进行加和、求平均等各种操作。x=data.frame(name=c("张三","李四","王五","赵六"),sex=c("M","M","F","F"),age=c(20,40,22,30),height=c(166,170,150,155))
x
## name sex age height
## 1 张三 M 20 166
## 2 李四 M 40 170
## 3 王五 F 22 150
## 4 赵六 F 30 155
aggregate(x[,3:4],by=list(sex=x$sex),FUN=mean)
## sex age height
## 1 F 26 152.5
## 2 M 30 168.0
knitr::opts_chunk$set(echo = TRUE)
我们可以调整x之后的参数来表示后面函数作用的对象,by之后的必须是list,而且list里面的参数可以是一个或者好几个。eg:sex=x$sex 表示新生成的数据有一个变量名为sex并且该变量的取值就是原来数据的sex这一列,而且这一列是不变的。我们可以重新调整list里面的参数看一下具体的变化如下所示aggregate(x[,3:4],by=list(name=x$name),FUN=mean)
## name age height
## 1 李四 40 170
## 2 王五 22 150
## 3 张三 20 166
## 4 赵六 30 155
knitr::opts_chunk$set(echo = TRUE)
我们可以重新调整list里面的参数增加至两个,看一下具体的变化如下所示aggregate(x[,3:4],by=list(name=x$name,sex=x$sex),FUN=mean)
## name sex age height
## 1 王五 F 22 150
## 2 赵六 F 30 155
## 3 李四 M 40 170
## 4 张三 M 20 166
knitr::opts_chunk$set(echo = TRUE)
几个注意点:1.字符或者factor类型的列不要一起加入计算,会报错2.by参数要构造成list,如果有多个字段,by就对应队列,和group ##3.by多个字段是同样的道理
|