gpt4 book ai didi

r - 从 data.frame 中的每个观察值中减去两级组均值

转载 作者:行者123 更新时间:2023-12-05 08:27:12 25 4
gpt4 key购买 nike

我需要从组内的每个观察值中减去按组计算的平均值。它具有挑战性的部分是我在数据框中有一个子组,或两个级别: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 进行平均,我会得到一个名为 test 的新 data.frame,它考虑了多级分组:

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。

最佳答案

这是一个基于 R 的解决方案:

B <- 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), 9),
V4=c("A","A","A","A","B","B","C","C","C"),
V5=c("TRUE","TRUE","TRUE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE"))
B[1:3] <- lapply(B[1:3], function(x) x - ave(x, B$V4, B$V5, FUN=mean))
B

我使用了其他数据。在您的示例数据框中,所有列都是因子(您不能使用因子进行计算,例如 mean(...))。

关于r - 从 data.frame 中的每个观察值中减去两级组均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44106982/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com