最近处理表格经常需要把数据按照某一属性分组,然后计算一些统计值。这个需求可以通过stats包中的aggregate
函数很轻松就可以实现。
## S3 method for class 'data.frame'
aggregate(x, by, FUN, ..., simplify = TRUE, drop = TRUE)
常用参数:
x, 你想要计算的属性或者列。
by, 是一个list,可以指定一个或者多个列作为分组的基础。
FUN, 指定一个函数,用来计算,可以作用在所有分组的数据上面。
type<-sample(letters[1:3],15,replace = T)
value<-sample(1:100,15,replace = T)
df<-data.frame(type,value)
df
# type value
# 1 a 79
# 2 a 13
# 3 c 42
# 4 b 55
# 5 a 91
# 6 a 55
# 7 a 69
# 8 c 46
# 9 b 29
# 10 a 86
# 11 a 57
# 12 a 46
# 13 a 16
# 14 a 67
# 15 b 98
分组求和(也可以求均值等,只需把sum改成对应的mean等即可)
aggregate(df$value, by=list(type=df$type),sum)
# type x
# 1 a 579
# 2 b 182
# 3 c 88
基于多个属性分组求和。
type_2 <- sample(c('m','n'),15,replace = T)
df$type_2
df$type_2 <- type_2
df
# type value type_2
# 1 a 79 n
# 2 a 13 m
# 3 c 42 n
# 4 b 55 n
# 5 a 91 n
# 6 a 55 n
# 7 a 69 n
# 8 c 46 m
# 9 b 29 n
# 10 a 86 n
# 11 a 57 m
# 12 a 46 n
# 13 a 16 n
# 14 a 67 n
# 15 b 98 n
aggregate(x=df$value, by=list(df$type,df$type_2),mean)
# Group.1 Group.2 x
# 1 a m 35.00000
# 2 c m 46.00000
# 3 a n 63.62500
# 4 b n 60.66667
# 5 c n 42.00000
网友评论