将一列中的多个字符串替换为其他值

时间:2018-01-24 18:10:29

标签: r dplyr

我有一个包含许多不同字符串的列,但有一些需要更改,而其他所有字符串保持不变。作为一个可重复的例子,我有以下几点:

set.seed(42)
x <- sample(c("a", "b", "c"), 10, replace = TRUE)
x
tibble(x) %>% dplyr::mutate(x, x = case_when(x=="a"~"Apple",
                                           x=="c"~"Cat"))

预期输出

     x    
   <chr>
 1 Cat  
 2 Cat  
 3 Apple
 4 Cat  
 5 b   
 6 b   
 7 Cat  
 8 Apple
 9 b   
10 Cat  

但我得到

     x    
   <chr>
 1 Cat  
 2 Cat  
 3 Apple
 4 Cat  
 5 NA   
 6 NA   
 7 Cat  
 8 Apple
 9 NA   
10 Cat

如果我没有指定新字符串代替旧字符串,如果我想要原始字符串,如何避免NA

2 个答案:

答案 0 :(得分:0)

dpyr之外,您可以尝试在ifelse

中使用ifelse
ifelse(x == "a","Apple",ifelse(x == "c", "cat", x))

[1] "cat" "cat"  "Apple" "cat" "b"  "b" "cat"  "Apple" "b"  "cat"  

答案 1 :(得分:0)

AntoniosK在评论中提供了针对该问题的最准确答案:

mutate(x, x = case_when(x=="a"~"Apple", x=="c"~"Cat", TRUE ~ x)) 

将保留所有其余值。至关重要的是,TRUE ~ xcase_when()中的最后一个参数,因为它将匹配所有情况,因此将不检查以下任何情况。