我的数据如上所示。我有9个二进制变量,9个二进制变量可以有27个组合。我想用27种组合得到raltv的总和或平均值
换句话说,我希望获得3个3X3表,并且表的元素是每个组合的平均值(raltv)(或sum(raltv))。
此外,我还想在每个组合中使用频率值。
答案 0 :(得分:2)
由于列是互斥的,我认为最好将3列的每个组折叠到一个标记为1/2/3或低/中/高的变量,然后使用tapply计算均值每组。 E.g:
dat <- data.frame(raltv=1:6,one_low=c(1,1,0,0,0,0),one_med=c(0,0,1,1,0,0),one_hi =c(0,0,0,0,1,1),two_low=c(1,1,0,0,0,0),two_med=c(0,0,1,1,0,0),two_hi =c(0,0,0,0,1,1),thr_low=c(1,1,0,0,0,0),thr_med=c(0,0,1,1,0,0),thr_hi =c(0,0,0,0,1,1))
看起来像:
raltv one_low one_med one_hi two_low two_med two_hi thr_low thr_med thr_hi
1 1 1 0 0 1 0 0 1 0 0
2 2 1 0 0 1 0 0 1 0 0
3 3 0 1 0 0 1 0 0 1 0
4 4 0 1 0 0 1 0 0 1 0
5 5 0 0 1 0 0 1 0 0 1
6 6 0 0 1 0 0 1 0 0 1
处理它:
dat$one <- c("low","med","hi")[col(dat[2:4])[dat[2:4]==1]]
dat$two <- c("low","med","hi")[col(dat[5:7])[dat[5:7]==1]]
dat$thr <- c("low","med","hi")[col(dat[8:10])[dat[8:10]==1]]
tapply(dat$raltv,dat[c("one","two","thr")],mean)
#, , thr = hi
#
# two
#one hi low med
# hi 5.5 NA NA
# low NA NA NA
# med NA NA NA
#
#, , thr = low
#
# two
#one hi low med
# hi NA NA NA
# low NA 1.5 NA
# med NA NA NA
#
#, , thr = med
#
# two
#one hi low med
# hi NA NA NA
# low NA NA NA
# med NA NA 3.5