R中虚拟变量创建的动态函数

时间:2016-10-18 10:56:00

标签: r dynamic

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。

谢谢!

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;而不是你的例子数据。