ID cat1 cat2 cat3 loss
1 A B D 2213.18
2 A B A 1283.60
3 A B B 3005.09
4 B A A 939.85
5 A B C 2763.85
6 A A A 5142.87
我列出了不同级别的116个分类变量。下面是我用来计算变量
中每个级别的平均值(损失)的函数a1<-summarise(group_by(ins,cat85), cat85_mean=mean(loss))
需要为剩余变量动态执行此操作的代码,以便我具有不同级别的所有分类变量的均值(损失)
例如:Cat85有4个等级,即A,B,C和D.该函数应产生A,B,C和D的平均值(损失),如A-2000,B-1234.5,C-5667.5,D- 3465.2。
谢谢!
答案 0 :(得分:1)
首先,将分类变量名称转换为向量。假设他们都以&#34; cat&#34;:
开头nn <- grep("cat", names(foo), value=TRUE)
然后找到每个分类变量的平均值:
foo <- lapply(nn,
function(n, dat) {
tapply(dat$loss, dat[,n], mean)
},
ins[,c(nn,"loss")])
并命名列表元素:
names(ins) <- nn
答案 1 :(得分:1)
以下是使用dplyr
:
lapply(grep("cat",names(ins), value = T),function(x){
summarise(group_by_(ins,.groups=x), catX_mean=mean(loss))
})
[[1]]
# A tibble: 2 × 2
.groups catX_mean
<chr> <dbl>
1 A 0.04570735
2 B 0.76317575
为简洁起见,我只显示第一列的结果。请注意,我使用了不同的值&#34; loss&#34;而不是你的例子数据。