【发布时间】:2021-12-28 21:11:39
【问题描述】:
我有以下数据集。
| group | value | row_name | overlaps |
|---|---|---|---|
| group_a | 4 | 1 | 2 |
| group_a | 5 | 2 | 3, 5 |
| group_a | 48 | 3 | 4, 5 |
| group_a | 54 | 4 | 5 |
| group_a | 12 | 5 | |
| group_b | 12 | 6 | 7 |
| group_b | 1 | 7 |
重叠列指示哪些行具有一定的“重叠”。
我希望,仅对于值大于 10 的行,将相应“重叠”列中指示的所有行的值列中的数据替换为零。
预期输出:
| group | value | row_name | overlaps |
|---|---|---|---|
| group_a | 4 | 1 | 2 |
| group_a | 5 | 2 | 3, 5 |
| group_a | 48 | 3 | 4, 5 |
| group_a | 0 | 4 | 5 |
| group_a | 0 | 5 | |
| group_b | 12 | 6 | 7 |
| group_b | 0 | 7 |
可重现的例子:
data <- data.frame(group = c("group_a", "group_a", "group_a", "group_a",
"group_a", "group_b", "group_b"),
value = c(4, 5 , 48, 54, 12, 12, 1),
row_name = c("1", "2", "3", "4", "5", "6", "7"),
overlaps = c("2", "3, 5", "4, 5", "5", "", "7", ""))
我不知道这是否是一个非常复杂的问题,但我被困了几个小时,我不知道如何解决它。
有人对我如何使用 dplyr 或 data.table 按组解决此问题有任何建议吗?
【问题讨论】:
-
我不遵循逻辑。为什么第三行也不是 0?它大于 10 并且位于重叠列表之一中。
-
@thelatemail 第三行在第二行的重叠列表中。第 2 行的值不大于 10。因此,第 3 行的值不会变为 0。与第 4 行和第 5 行不同,它们在值 > 10 的第 3 行的重叠列表中。
标签: r datatable data-wrangling