我需要对数据集做一些描述性统计。 我需要从数据集中创建一个表,为每个级别提供另一个变量的平均值。
city mean(age)
1 14
2 15
3 23
4 34
哪种方式在R中最快?
我要做的另一件事情是同样的事情,但在两个方面:
mean(age) male female
city
1 12 13
2 15 16
3 21 22
4 34 33
我想知道是否还可以应用其他功能,如max,min,sum ....
编辑:我添加数据集以更轻松地创建示例:
data.frame(years=rep(c(12,13,14,15,15,16,34,67,45,78,17,42),2),sex=rep(c("M","F"),12),city=rep(c(1,2,3,4,4,3,2,1),3))
答案 0 :(得分:2)
可以尝试(在大数据集上添加data.table
包以加快dcast
)
library(data.table)
library(reshape2)
dcast.data.table(setDT(dato), city ~ sex, value.var = "years", fun = mean)
# city F M
# 1: 1 41.33333 24.00000
# 2: 2 35.66667 21.66667
# 3: 3 35.66667 21.66667
# 4: 4 41.33333 24.00000
您也可以定期使用data.table
dato <- setkey(setDT(dato)[, list(mean = mean(years)), by = list(city, sex)])
# city sex mean
# 1: 1 F 41.33333
# 2: 1 M 24.00000
# 3: 2 F 35.66667
# 4: 2 M 21.66667
# 5: 3 F 35.66667
# 6: 3 M 21.66667
# 7: 4 F 41.33333
# 8: 4 M 24.00000
或dplyr
包(也非常快)
library(dplyr)
dato %>%
group_by(city, sex) %>%
summarize(mean(years))
# city sex mean(years)
# 1 1 F 41.33333
# 2 1 M 24.00000
# 3 2 F 35.66667
# 4 2 M 21.66667
# 5 3 F 35.66667
# 6 3 M 21.66667
# 7 4 F 41.33333
# 8 4 M 24.00000
答案 1 :(得分:1)
由于您还询问了如何将大量函数应用于一列或多列:您可以使用dplyr
轻松完成此操作:
library(dplyr)
dato %>%
group_by(city, sex) %>%
summarise_each(funs(mean, min, max, sum))
#Source: local data frame [8 x 6]
#Groups: city
#
# city sex mean min max sum
#1 1 F 41.33333 15 67 124
#2 1 M 24.00000 12 45 72
#3 2 F 35.66667 13 78 107
#4 2 M 21.66667 14 34 65
#5 3 F 35.66667 13 78 107
#6 3 M 21.66667 14 34 65
#7 4 F 41.33333 15 67 124
#8 4 M 24.00000 12 45 72
默认情况下,这会将定义的函数应用于除分组变量(城市,性别)之外的所有列。由于您只有三列,因此这些功能仅应用于年龄列。您还可以通过将summarise_each
更改为
summarise_each(funs(mean, min, max, sum), c(col1, col2)) # include only col1 and col2
summarise_each(funs(mean, min, max, sum), -c(col2, col3)) # exclude col2 and col3