如何使用 dplyr 的跨函数替换所有值

chi*_*sin 0 r dplyr

我以前使用mutate_all函数 indplyr来替换数据框中的值。我正在尝试更新我的代码以适应新的跨功能,但我不确定如何更新它以便它可以执行替换功能。

下面是一个示例数据集。

df$A <- c(10,0,0,0,0,0,12,12,0,14,-99,14,-99,-99,16,16)
df$B <- c(10,0,0,0,12,12,12,12,0,14,-99,14,16,16,16,16)
df$C <- c(10,12,14,16,10,12,14,16,10,12,14,16,10,12,14,16)

  A   B  C
 10  10 10
  0   0 12
  0   0 14
  0   0 16
  0  12 10
  0  12 12
 12  12 14
 12  12 16
  0   0 10
 14  14 12
-99 -99 14
 14  14 16
-99  16 10
-99  16 12
 16  16 14
 16  16 16
Run Code Online (Sandbox Code Playgroud)

我之前用来替换某个值(在本例中为 -99)的代码如下,并且成功运行。

df %>% mutate_all(funs(replace(., .== -99, "Removed")))

      A       B  C
     10      10 10
      0       0 12
      0       0 14
      0       0 16
      0      12 10
      0      12 12
     12      12 14
     12      12 16
      0       0 10
     14      14 12
Removed Removed 14
     14      14 16
Removed      16 10
Removed      16 12
     16      16 14
     16      16 16
Run Code Online (Sandbox Code Playgroud)

下面是我尝试实现该across函数的方式everything(这用我想要的替换值替换了数据框中的所有单元格;而不仅仅是 -99 的实例)。

df %>% mutate(across(everything(), replace, -99 , "Removed"))
Run Code Online (Sandbox Code Playgroud)

Ron*_*hah 5

用 :

library(dplyr)
df %>% mutate(across(everything(), ~replace(., . ==  -99 , "Removed")))
Run Code Online (Sandbox Code Playgroud)

.cols参数across是默认的,everything()所以这也能工作。

df %>% mutate(across(.fns = ~replace(., . ==  -99 , "Removed")))
Run Code Online (Sandbox Code Playgroud)

但是,最简单的是:

df[df == -99] <- 'Removed'
Run Code Online (Sandbox Code Playgroud)

  • 当您想使用公式符号调用函数时,可以使用不同的方式来调用函数“~”。`across(everything(), na_if, -99)` 不使用它。如果您想使用公式符号,请使用 `across(everything(), ~na_if(., -99))` (2认同)