根据另一列中的元素重命名特定列元素
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"
抱歉,如果这是一个简单的问题,我真的很难找到解决方案。这里有一个类似但不完全相同的问题,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"