使用 R,我很快就会迷失在条件/if-else 类型的工作中。通常我可以使用堆栈溢出线程来解决问题,但我还没有弄清楚如何搜索这个特定问题。假设我有以下 DF:
A 栏 | B 栏 | C 栏 |
---|---|---|
熊猫 | 变体 1 | 10.0 |
猴子 | 变体 2 | 5.0 |
猴子 | 变体 1 | 7.0 |
熊猫 | 变体3 | 8.0 |
我想创建一个新专栏,D 栏。 如果 B 列 == 变体 2 以外的任何变体,那么我想要 D 列 == C 列的值。 如果B列==“变体2”,那么我想要D列的值==(当A列相同但B列是变体1时,C列+C列)。
因此,对于上表,结果将是:
A 栏 | B 栏 | C 栏 | D 栏 |
---|---|---|---|
熊猫 | 变体 1 | 10.0 | 10.0 |
猴子 | 变体 2 | 5.0 | 12.0 |
猴子 | 变体 1 | 7.0 | 7.0 |
熊猫 | 变体3 | 8.0 | 8.0 |
我尝试了几种不同的 if/else 语句来尝试让事情顺利进行,但没有一个能够接近。任何解决方案将不胜感激!
这里有一个选项:
library(dplyr)
df |>
group_by(`Column A`) |>
filter(any(`Column B` == "Variant 2")) |>
summarize(`Column C` = sum(`Column C`), `Column B` = "Variant 2") |>
rows_update(df, y = _, by = c("Column A", "Column B"))
基本上,您会取出“当 A 列相同时”和
Column B == "Variant 2"
的行并对值求和,然后仅更新这些行(因为其他行保持不变)。