【发布时间】:2022-01-17 16:59:14
【问题描述】:
抱歉,如果这是一个简单的问题,我真的很难找到解决方案。这里有一个类似的问题,但并不完全相同,而且似乎没有一个解决方案对我有用:Replacing row elements in a column based on row elements from another column in Tidyverse
我有一个df如下:
Loop <- c('0','1','','0','1','2','0','1','','0','1','2')
Condition <- c('base','base','base','AOMI1','AOMI1','AOMI1','control','control',
'control','AOMI2','AOMI2','AOMI2')
df <- data.frame(Loop, Condition)
Loop Condition
1 0 base
2 1 base
3 base
4 0 AOMI1
5 1 AOMI1
6 2 AOMI1
7 0 control
8 1 control
9 control
10 0 AOMI2
11 1 AOMI2
12 2 AOMI2
我想重命名名为“循环”的列中的所有“1”实例,但对于“条件”列中的不同条件不同。对于“基本”和“控制”条件,我希望将“1”重命名为“imageryQ”,对于“AOMI1”和“AOMI2”,我希望“1”变为“VI”。这就是我希望数据的样子:
Loop2 Condition
1 0 base
2 imageryQ base
3 base
4 0 AOMI1
5 VI AOMI1
6 2 AOMI1
7 0 control
8 imageryQ control
9 control
10 0 AOMI2
11 VI AOMI2
12 2 AOMI2
如果这可以基于列内容而不是行号来完成会更好,因为我不确定数据是否会改变。但它不太可能改变,所以如果使用行号的解决方案更简单,那么这些选项也会很好!
非常感谢任何帮助。
【问题讨论】:
-
您可以使用
case_when,就像在您发布的链接中一样。mutate(df, Loop2 = case_when(Loop != 1 ~ Loop, Condition %in% c("base", "control") ~ "imageryQ", str_detect(Condition, "AOMI") ~ "VI")) -
@caldwellst 谢谢,但这不起作用。运行代码会更改 Loop 列中 1、2 或 NA 的每个实例,而不仅仅是 1 用于基础、AOMI1 和 AOMI2 条件,并且 NA 会替换 Loop 列中的 1 和 2 用于控制条件。