将 replace_na() 与不确定的列数一起使用
using replace_na() with indeterminate number of columns
我的数据框如下所示:
df <- tibble(x = c(1, 2, NA),
y = c(1, NA, 3),
z = c(NA, 2, 3))
我想使用 tidyr::replace_na() 将 NA 替换为 0。正如此函数的文档所阐明的那样,一旦您知道要对哪些列执行操作,就可以直接执行此操作。
df <- df %>% replace_na(list(x = 0, y = 0, z = 0))
但是如果列数不确定怎么办? (我说 'indeterminate' 是因为我正在尝试创建一个使用 dplyr 工具即时执行此操作的函数。)如果我没记错的话,基本 R 相当于我使用上述方法实现的目标工具是:
df[, 1:ncol(df)][is.na(df[, 1:ncol(df)])] <- 0
但我总是难以理解这段代码。预先感谢您的帮助。
我们可以根据数据集的列数创建一个 list
的 0,并使用列名设置名称
library(tidyverse)
df %>%
replace_na(set_names(as.list(rep(0, length(.))), names(.)))
# A tibble: 3 x 3
# x y z
# <dbl> <dbl> <dbl>
#1 1 1 0
#2 2 0 2
#3 0 3 3
或者另一个选项是 mutate_all
(对于选定的列 -mutate_at
或基本条件 mutate_if
)并应用 replace_all
df %>%
mutate_all(replace_na, replace = 0)
有了base R
,就更直接了
df[is.na(df)] <- 0
我的数据框如下所示:
df <- tibble(x = c(1, 2, NA),
y = c(1, NA, 3),
z = c(NA, 2, 3))
我想使用 tidyr::replace_na() 将 NA 替换为 0。正如此函数的文档所阐明的那样,一旦您知道要对哪些列执行操作,就可以直接执行此操作。
df <- df %>% replace_na(list(x = 0, y = 0, z = 0))
但是如果列数不确定怎么办? (我说 'indeterminate' 是因为我正在尝试创建一个使用 dplyr 工具即时执行此操作的函数。)如果我没记错的话,基本 R 相当于我使用上述方法实现的目标工具是:
df[, 1:ncol(df)][is.na(df[, 1:ncol(df)])] <- 0
但我总是难以理解这段代码。预先感谢您的帮助。
我们可以根据数据集的列数创建一个 list
的 0,并使用列名设置名称
library(tidyverse)
df %>%
replace_na(set_names(as.list(rep(0, length(.))), names(.)))
# A tibble: 3 x 3
# x y z
# <dbl> <dbl> <dbl>
#1 1 1 0
#2 2 0 2
#3 0 3 3
或者另一个选项是 mutate_all
(对于选定的列 -mutate_at
或基本条件 mutate_if
)并应用 replace_all
df %>%
mutate_all(replace_na, replace = 0)
有了base R
,就更直接了
df[is.na(df)] <- 0