抱歉,如果這是一個簡單的問題,我真的很難找到解決方案。這里有一個類似的問題,但并不完全相同,而且似乎沒有一個解決方案對我有用:根據 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
我想重命名名為 'Loop' 的列中的所有 '1' 實體,但對于 'Condition' 列中的不同條件。對于“基礎”和“控制”條件,我希望將“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
如果這可以根據列內容而不是行號來完成會更好,因為我不確定資料是否會改變。不過它不太可能改變,所以如果使用行號的解決方案更簡單,這些選項也會很好!
非常感謝任何幫助。
uj5u.com熱心網友回復:
這可以使用一個簡單的 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"
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/380654.html
