【发布时间】:2017-05-22 07:25:39
【问题描述】:
我需要从组内的每个观察中减去按组计算的平均值。具有挑战性的部分是我在数据框中有一个子分组,或者两个级别:V5 和 V4。这是我的 data.frame 结构的示例:
B = as.data.frame(matrix(
c(2,2,3,3,4,3,1,5,7,6,4,5,8,9,2,3,8,4,5,0,7,5,6,7,5,3,2,
"A","A","A","A","B","B","C","C","C",
"TRUE","TRUE","TRUE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE"),
nrow=9,ncol=5))
所以我的 data.frame B 看起来像这样:
V1 V2 V3 V4 V5
1 2 6 5 A TRUE
2 2 4 0 A TRUE
3 3 5 7 A TRUE
4 3 8 5 A TRUE
5 4 9 6 B FALSE
6 3 2 7 B FALSE
7 1 3 5 C FALSE
8 5 8 3 C FALSE
9 7 4 2 C FALSE
因此,如果我按 V5 和 V4 进行平均,我会得到一个新的 data.frame,我称之为 test,它考虑了多级分组:
test <- aggregate(. ~ B$V5+B$V4,data=B, mean)
> test
B$V5 B$V4 V1 V2 V3 V4 V5
1 TRUE A 2.5 4.500000 3.75 1 2
2 FALSE B 3.5 4.000000 5.50 2 1
3 FALSE C 4.0 3.666667 3.00 3 1
所以我正在努力的是从 data.frame B 中的原始观察中减去 data.frame test 中的两级组的平均值。直觉上,我假设会有一个 apply() 函数和某种条件语句,但它对我来说有点高级编码,我还在学习 R。
【问题讨论】:
-
嗨,
test中的最后两列是编码因子:B中的 V4 是 A、B 或 C 等于 1,2 和test中的 3。B中的 V5 为 TRUE/FALSE,在test中编码为 1 和 2。我不需要test中的最后两列,但我需要从B中的相应观察组中减去test中的V1、V2 和V3 列中的数字。它是我想要做的数据的中心。
标签: r dataframe data.table dplyr