给定一个数据框,
ID <- c("a","b","b","c","c","c","d","d","d")
dummy1 <- c(1,0,1,1,0,0,1,1,0)
dummy2 <- c(0,0,0,0,1,1,1,1,1)
dummy3 <- c(1,0,0,1,1,0,0,1,1)
df <- data.frame(ID,dummy1,dummy2,dummy3)
ID dummy1 dummy2 dummy3
1 a 1 0 1
2 b 0 0 0
3 b 1 0 0
4 c 1 0 1
5 c 0 1 1
6 c 0 1 0
7 d 1 1 0
8 d 1 1 1
9 d 0 1 1
我想计算一组多个虚拟变量中每个变量的平均值。
就像在多行上使用tapply
,aggregate
或ave(x,y,mean)
函数一样,同时创建一个新的变量/列。不幸的是,我事先不知道虚拟变量的数量。我唯一知道的是虚拟变量从第 2 列开始。我的结果如下所示:
ID m_dummy1 m_dummy2 m_dummy3 m_dummy5...
a 1 0 1
b 0 0 0
c 0.33 0.66 0.66
d 0.66 1 0.66
或像这样:
ID m_dummy1 m_dummy2 m_dummy3 m_dummy5...
a ... 1 0 1
b ... 0 0 0
b ... 0 0 0
c ... 0.33 0.66 0.66
c ... 0.33 0.66 0.66
c ... 0.33 0.66 0.66
d ... 0.66 1 0.66
d ... 0.66 1 0.66
d ... 0.66 1 0.66
在我的场景中,我有从 1 到 x 的未知数量的假人,所以我可能只有 dummy2,但也许我有“dummy1”和虚构的假人“dummy5”和“dummy6”。完美的解决方案将允许我为第 2 列之后的所有列创建“m_dummy”列。因此,如果 dummy3 丢失或有额外的 dummy4,它也可以工作dummy4 <- c(1,0,0,0,0,0,0,1,0)