根据另一列中的元素重命名特定列元素

Rename specific column elements based on elements in another column

抱歉,如果这是一个简单的问题,我真的很难找到解决方案。这里有一个类似但不完全相同的问题,none 的解决方案似乎对我有用:

我有一个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

我想在名为 'Loop' 的列中重命名“1”的所有实例,但对于 'Condition' 列中的不同条件不同。对于 'base' 和 'control' 条件,我希望将“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

如果这可以根据列内容而不是行号来完成会更好,因为我不确定数据是否可以更改。不过它不太可能改变,所以如果使用行号的解决方案更简单,那么这些选项也不错!

非常感谢任何帮助。

这可以使用一个简单的 dplyr::case_when 函数来完成:

library(tidyverse)

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)

df %>%
  mutate(Loop = case_when(
    Loop == "1" & Condition == "base" ~ "imageryQ",
    Loop == "1" & Condition == "control" ~ "imageryQ",
    Loop == "1" & Condition == "AOMI1" ~ "VI",
    Loop == "1" & Condition == "AOMI2" ~ "VI",
    TRUE ~ Loop
  ))

你可以通过写

来缩短它
Loop == "1" & Condition %in% c("base","contorl") ~ "imageryQ"