-2

在这个问题之后(根据列更新名称),我想问的另一件事

df <- data.frame(name1 = c("a", "a", "a", "a", 'a', NA, NA, NA,NA),
                 name2 = c("b", "b", "b", "b", "c", NA, NA, NA,NA),
                 name3 = c("b", "b", "b", "b", "c", "a", "a", "a", "f"))

df
  name1 name2 name3
1     a     b     b
2     a     b     b
3     a     b     b
4     a     b     b
5     a     c     c
6  <NA>  <NA>     a
7  <NA>  <NA>     a
8  <NA>  <NA>     a
9  <NA>  <NA>     f

现在,我想f在替换a为时保留b

- 期望的输出

  name1 name2 name3
1     a     b     b
2     a     b     b
3     a     b     b
4     a     b     b
5     a     c     c
6  <NA>  <NA>     b
7  <NA>  <NA>     b
8  <NA>  <NA>     b
9  <NA>  <NA>     f

来自@Rui 和@TarJae 评论的代码

df %>% 
  mutate(name3 = case_when(
    any(name1 == "a") & is.na(name2) ~ "b",
    TRUE ~ name3
  ))

但是,在这种情况下,这不起作用,因为我NAname2. 对我有什么建议吗?

4

3 回答 3

2

如果你只是想保留f,这个怎么样?

编辑除了a并且b不会被改变。

df %>% 
  mutate(name3 = case_when(
    !(name3 %in% c("a", "b")) ~ name3,
    any(name1 == "a") & is.na(name2) ~ "b",
    TRUE ~ name3
  ))


  name1 name2 name3
1     a     b     b
2     a     b     b
3     a     b     b
4     a     b     b
5     a     c     c
6  <NA>  <NA>     b
7  <NA>  <NA>     b
8  <NA>  <NA>     b
9  <NA>  <NA>     f
于 2021-10-12T02:51:40.050 回答
2

概括解决方案@Tjn25,可以执行以下操作

f <- function(x) ifelse(x == "a", "b", x)

data.frame(lapply(df, f))
于 2021-10-12T05:27:48.303 回答
1

如果您只想更改要更改的names3列值,a那么b 您可以使用

df$name3[df$name3 == 'a'] <- 'b'
于 2021-10-12T02:57:01.647 回答