我试图将某些特定变量的NA替换为0,而与它们的位置无关。我写了下面的代码,但出现了一些错误..
data1[, starts_with("Year_")][is.na(data1[, starts_with("Year_")])] <- 0
我收到以下错误
Error: No tidyselect variables were registered
Call `rlang::last_error()` to see a backtrace
我已经安装了dplyr
,tidyr
,tidyselect
,但仍然出现此错误,有人可以在此问题上帮助我。
由于您没有提供MRE,所以我必须自己创建它:
df<- data.frame(id = 1:5,
Prefix_1 = c(1, 2, 3, NA, 5),
Prefix_2 = c(NA, 1, 2, 3, NA))
解决方案,如何用虚构数据替换NA
:
df[, grepl("^Prefix_", names(df))][is.na(df[, grepl("^Prefix_", names(df))])] <- 0
df现在是:
id Prefix_1 Prefix_2 1 1 1 0 2 2 2 1 3 3 3 2 4 4 0 3 5 5 5 0
只需注意,仅因为我们can用NA
替换0
并不意味着我们应该。我认为您有很好的理由为什么 NA
应该是0
;)
dplyr
的解决方案:
df<- data.frame(id = 1:5,
Prefix_1 = c(1, 2, 3, NA, 5),
Prefix_2 = c(NA, 1, 2, 3, NA))
library(dplyr)
df %>%
mutate_at(vars(matches("^Prefix")), coalesce, 0)
或者,使用dplyr
和tidyr::starts_with
:
library(dplyr)
library(tidyr)
df %>%
mutate_at(vars(starts_with("Prefix")), coalesce, 0)