我有一个包含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/

10-12 05:53