【发布时间】:2021-06-25 09:02:50
【问题描述】:
我有一个问题,我需要根据 ID1 和 ID2 将长格式数据表重塑为具有不重叠条目的宽格式。逻辑相当复杂,依赖于 3 列(“Seq”、“ID1”和“ID2”)。
如果属于 ID1 的 Value_1 与 ID2“重叠”,则应将其相加,反之亦然,但仅适用于不同的 ID。
请参阅下面的输入示例和输出,希望能够澄清它。
输入:
df <- structure(list(Seq = c(9143L, 916L, 9293L, 9301L, 9302L, 9304L,
9305L, 9306L, 9307L, 931L, 9311L), ID1 = c("ID1_1", "ID1_1",
NA, "ID1_2", "ID1_2", NA, "ID1_3", "ID1_3", "ID1_3", "ID1_4",
"ID1_4"), value_1 = c(30L, 30L, NA, 30L, 30L, NA, 30L, 30L, 30L,
50L, 50L), ID2 = c(NA, NA, "ID2_1", "ID2_2", "ID2_3", "ID2_4",
"ID2_4", "ID2_4", "ID2_4", "ID2_4", "ID2_5"), value_2 = c(NA,
NA, 33L, 200L, 46L, 58L, 58L, 58L, 58L, 58L, 46L)), class = "data.frame", row.names = c(NA,
-11L))
输出:
(例如最后一行,value_1 = 80,因为 30+50 来自 ID1_3 和 ID1_4 的值的总和)
【问题讨论】:
-
我看不出问题的关键在哪里。在我看来,你有一个逻辑```` df1 % mutate(value_2 = if(ID_1 == ID_2, value_1 + value_2, value_2))````。你能更好地阐述逻辑吗?
-
公平地说,他从来没有提到过枢轴,虽然他使用的术语很宽很长,但可能不知道枢轴x函数。
-
我在表格中澄清了一点,希望对您有所帮助
-
您写道“逻辑非常复杂”,但您提供的唯一描述是“......如果它'重叠'则求和......”其中没有定义'重叠'...... ;) 请更彻底地描述逻辑,并带我们通过一个具有代表性的案例,而不是将解密留给我们。干杯
标签: r dataframe dplyr reshape tidyr