ban*_*d15 2 r dplyr tidyr tidyeval
我的数据框如下所示:
df <- tibble(x = c(1, 2, NA),
y = c(1, NA, 3),
z = c(NA, 2, 3))
Run Code Online (Sandbox Code Playgroud)
我想使用tidyr :: replace_na()将NA替换为0。正如该函数的文档所阐明的那样,一旦知道要在哪个列上执行操作,就可以很容易地做到这一点。
df <- df %>% replace_na(list(x = 0, y = 0, z = 0))
Run Code Online (Sandbox Code Playgroud)
但是,如果列数不确定,该怎么办?(之所以说“不确定”,是因为我试图创建一个使用dplyr工具即时执行此操作的函数。)如果我没记错的话,等效于我要使用上述工具实现的基数R是:
df[, 1:ncol(df)][is.na(df[, 1:ncol(df)])] <- 0
Run Code Online (Sandbox Code Playgroud)
但是我总是很难理解这个代码。在此先感谢您的帮助。
为此,我们可以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
Run Code Online (Sandbox Code Playgroud)
或另一个选项是mutate_all(对于选定的列- mutate_at或基本don条件mutate_if)并应用replace_all
df %>%
mutate_all(replace_na, replace = 0)
Run Code Online (Sandbox Code Playgroud)
使用base R,则更直接
df[is.na(df)] <- 0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
480 次 |
| 最近记录: |