为所有列替换负值为NA?

7
假设我的数据看起来像这样(有更多的列):
set.seed(112116)
df <- data.frame(x1 = sample(c(LETTERS, -1:-10), 100, replace = T),
                 x2 = sample(c(letters, -1:-10), 100, replace = T),
                 x3 = sample(c(1:30, -1:-10), 100, replace = T))

我想把所有的负数替换为NA。我可以像这样一个一个地进行替换:

df <- df %>% mutate(x1 = replace(x1, which(x1<0), NA),
              x2 = replace(x2, which(x2<0), NA),
              x3 = replace(x3, which(x3<0), NA))

但我希望有一种方法能够针对我的所有数据列进行此操作。

1个回答

15

尝试使用mutate_each

df %>% 
    mutate_each(funs(replace(., .<0, NA)))

或者在新版本的dplyr中,版本号>= 1.00

df %>%
   mutate(across(everything(),  ~ case_when(.x >=0 ~ .x)))

3
з”ұдәҺmutate_eachе·Іиў«ејғз”ЁпјҲеҸӮи§Ғпјҡhttps://dev59.com/questions/MKPia4cB1Zd3GeqPyGo2пјүпјҢеӣ жӯӨдҪҝз”Ёmutate_allеҸҜд»ҘиҫҫеҲ°зӣёеҗҢзҡ„ж•ҲжһңгҖӮ - Frederick
1
具体来说,以下是两种适用于当前版本的 dplyr 的解决方案:df |> mutate_all(list(~ replace(., . < 0, NA))) 或者 df |> mutate(across(everything(), ~ replace(., . < 0, NA)))。如果您只想在特定列中进行替换,则后者更加灵活。 - cbrnr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接