【发布时间】:2019-06-15 01:30:22
【问题描述】:
我有以下示例数据。共有 X、Y 和 Z 三组,观测值 1 到 9 分为这些组。对于每个观察,我观察变量 A 和 B。所以:
test <- data.frame(
id = 1:9,
group = c(rep("X", 3), rep("Y", 3), rep("Z", 3)),
A = seq(from = 0.15, to = 0.55, by = 0.05),
B = 5:13
)
这给了
id group A B
1 1 X 0.15 5
2 2 X 0.20 6
3 3 X 0.25 7
4 4 Y 0.30 8
5 5 Y 0.35 9
6 6 Y 0.40 10
7 7 Z 0.45 11
8 8 Z 0.50 12
9 9 Z 0.55 13
我很长一段时间以来一直在努力实现的是:对于每个观察值 1 到 9,将该观察值的 A 值相对于该观察值组的所有其他观察值的 A 值的加权差求和。因此,对于观察 1 到 4(作为示例),它应该如下所示:
id 1: (0.15 - 0.15) * 5 + (0.15 - 0.20) * 6 + (0.15 - 0.25) * 7 = -1
id 2: (0.20 - 0.15) * 5 + (0.20 - 0.20) * 6 + (0.20 - 0.25) * 7 = -0.1
id 3: (0.25 - 0.15) * 5 + (0.25 - 0.20) * 6 + (0.25 - 0.25) * 7 = 0.8
id 4: (0.30 - 0.30) * 8 + (0.30 - 0.35) * 9 + (0.30 - 0.40) * 10 = -1.45
例如,对于观察 3,这转化为单词:
第 1 步:0.25 是观察 3 在 A 上的值,该值与观察 1 在 A 上的值(即 0.15)进行比较,这个 0.10 的差异按 5 加权(观察 1 在 B 上的值)
第 2 步:将 0.25(观察 3 在 A 上的值)与观察 2 在 A 上的值 (0.20) 进行比较,并将 0.05 的差异加权 6(观察 2 在 B 上的值)
第 3 步:将 0.25(A 上的观测值 3 的值)与 A 上的(它自己的)值进行比较,并且这个 0 的差异被加权 7(它自己在 B 上的值)(我看到这一步没有必要给出0的差异;为了完整性而添加)。
步骤 4:步骤 1-3 的总和
是否有可行的方法在 R 中实现这一点?我一直在尝试使用mutate 和group_by,但到目前为止都没有成功。非常感谢任何帮助。
【问题讨论】: