-1

对于某些特定变量,无论它们的位置如何,我都试图用 0 替换 NA。我写了下面的代码,但得到了一些错误..

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,但我仍然收到此错误,任何人都可以帮助我解决这个问题。

4

1 回答 1

1

由于您没有提供 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

请注意,仅因为我们可以替换NAs0并不意味着我们应该。我假设你有一个很好的理由为什么 NAs 应该是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)

或者,使用dplyrand tidyr::starts_with

library(dplyr)   
library(tidyr)
df %>% 
  mutate_at(vars(starts_with("Prefix")), coalesce,  0)
于 2020-03-09T12:33:00.003 回答