在这个问题(基于列更新名称)之后,我想问的另一件事
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
,而用b
代替a
。
所期望的输出
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
))
然而,在这种情况下,这不起作用,因为我从name2
调用NA
。有什么建议吗?
如果你只是想保持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
概括解决方案@Tjn25,可以执行以下操作
f <- function(x) ifelse(x == "a", "b", x)
data.frame(lapply(df, f))
如果您只想将names3
列的值从a
更改为b
然后你可以使用
df$name3[df$name3 == 'a'] <- 'b'