我有一个包含30个变量的数据集。其中之一是指标变量(0或1),我想减去某些列的标签为1的那些行的平均值(类似于居中,但取某些行的平均值而不是整个列的平均值)。
Col2 Col3 Col4 label
400 322 345 1
131 345 809 1
565 676 311 0
121 645 777 0
322 534 263 0
545 222 111 0
对于以上数据集,我想对
Col2:Col4
执行以下操作:x(i,j)-x'(,j)
其中
x(i,j)
代表一个单元格,而x'(,j)
代表label=1
的列中各行的平均值。例如,对于[3,1]
,应为(565-mean(400,131))= 299.5
第2栏的预期输出:
Col2
134.5
-134.5
299.5
-144.5
56.5
279.5
我一直在尝试使用
summarise_each
命令,但到目前为止仍未成功。我给的命令是try<- group_by(data,lbl) %>% select(c(4,13:26)) %>% summarise_each(funs((.)-(mean(data[data$lbl==1,])))
但这会生成
NA
,但我不太确定我哪里出错了(我确定它在summarise_each
命令中,我无法弄清楚如何正确使用funs()
)任何帮助表示赞赏。谢谢!
最佳答案
dat %>%
mutate_each(funs(. - mean(.[label==1])), -label)
Col2 Col3 Col4 label
1 134.5 -11.5 -232 1
2 -134.5 11.5 232 1
3 299.5 342.5 -266 0
4 -144.5 311.5 200 0
5 56.5 200.5 -314 0
6 279.5 -111.5 -466 0
关于r - 使用summarise_each减去某些行的平均值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38379575/