我有这个数据集
id = c(1,1,1,2,2,3)
v1 = c(3,4,5,2,4,5)
v2 = c(3,1,2,1,4,5)
v3 = c(2,1,2,3,3,4)
mydata <- data.frame(id ,v1, v2, v3)
> mydata
id v1 v2 v3
1 1 3 3 2
2 1 4 1 1
3 1 5 2 2
4 2 2 1 3
5 2 4 4 3
6 3 5 5 4
按ID
分组数据groupdata <- group_by(mydata, id)
使用summaryrize函数可以通过id获得特定的列平均值:
summarize(groupdata, mean = mean(v1))
# A tibble: 3 × 2
id mean
<dbl> <dbl>
1 1 4
2 2 3
3 3 5
我要做的是循环每一列并总结它们
colnames <- names(mydata)
for(i in colnames){
assign(paste(i,"mean", sep = "_"), summarize(groupdata, mean = mean(i)))
}
但我得到了这个
> v1_mean
# A tibble: 3 × 2
id mean
<dbl> <lgl>
1 1 NA
2 2 NA
3 3 NA
我发现你不能将列名作为参数传递给汇总函数,有没有改进循环函数的建议?
答案 0 :(得分:1)
对不起,我误会了。试一试。
library(dplyr)
grouped_mean <- mydata %>%
group_by(id) %>%
mutate_all(.funs = mean) %>%
distinct(.keep_all = TRUE)
> grouped_mean
Source: local data frame [3 x 4]
Groups: id [3]
id v1 v2 v3
<dbl> <dbl> <dbl> <dbl>
1 1 4 2.0 1.666667
2 2 3 2.5 3.000000
3 3 5 5.0 4.000000
根据@jdobres评论,您可以跳过summarise_all
grouped_mean <- mydata %>%
group_by(id) %>%
summarise_all(.funs = mean)
> grouped_mean
# A tibble: 3 × 4
id v1 v2 v3
<dbl> <dbl> <dbl> <dbl>
1 1 4 2.0 1.666667
2 2 3 2.5 3.000000
3 3 5 5.0 4.000000
答案 1 :(得分:0)
我认为@Nick意味着apply(mydata, 2, mean)
,结果是:
id v1 v2 v3
1.666667 3.833333 2.666667 2.500000