【发布时间】:2020-12-05 12:35:54
【问题描述】:
我将不胜感激以下方面的帮助。这是一些玩具数据:
df <- data.frame(id1 = c(1, 1, 2, 2, 2, 3, 3, 3, 3, 3),
V1 = c(5, 10, 5, 15, 30, 1, 1, 1, 1, 1),
V2 = c(1, 2, 3, 2, 7, 4, 0, 8, 1, 3))
这个想法是逐步将数据分成组g,将V2列中组内的最大值分配给新列y,在进度的每个步骤中使用
不太严格的标准。在这种情况下,有 2 个步骤。
匹配应该一直持续到每个组有 5 个元素,或者直到完成所有步骤。
第一步很简单——具有相同id1 的行应该属于同一个组:
df1 <- data.frame(id1 = c(1, 1, 2, 2, 2, 3, 3, 3, 3, 3),
V1 = c(5, 10, 5, 15, 30, 1, 1, 1, 1, 1),
V2 = c(1, 2, 3, 2, 7, 4, 0, 8, 1, 3),
g = c(1, 1, 2, 2, 2, 3, 3, 3, 3, 3),
y = c(2, 2, 7, 7, 7, 8, 8, 8, 8, 8))
对于第二步,我想将V1 彼此相距在 5 个单位以内的值配对在一起,或者在第 1 步中配对在一起。
df2 <- data.frame(id1 = c(1, 1, 2, 2, 2, 3, 3, 3, 3, 3),
V1 = c(5, 10, 5, 15, 30, 1, 1, 1, 1, 1),
V2 = c(1, 2, 3, 2, 7, 4, 0, 8, 1, 3),
g = c(1, 1, 1, 1, 1, 2, 2, 2, 2, 2),
y = c(7, 7, 7, 7, 7, 8, 8, 8, 8, 8)).
注意应该发生两件事:
-
id1 = 1和id2 = 2的值被组合在一起。这应该是因为第二行和第三行:|10 - 5| <= 5。但即使第 2 行和第 4 行或第 3 行和第 4 行不是这样,它们仍应分组在一起,因为在第一步中分组的观察结果在第二步中不应该是不匹配的。 -
id1 = 3的组没有变化,因为它已经有 5 个组件。
OBS:我不太关心每个组中的名字g,只关心y。
我怎样才能运行一个代码,以使更大的数据集发生这种情况,包括更多的步骤和更复杂的 每个步骤的条件?
我知道如何独立执行每个分类,但不知道如何进行更新过程。我会优先使用tidyverse
【问题讨论】: