R中的辅助函数

问题描述 投票:0回答:1

我试图将某些特定变量的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

我已经安装了dplyrtidyrtidyselect,但仍然出现此错误,有人可以在此问题上帮助我。

r helper tidyselect
1个回答
0
投票

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

只需注意,仅因为我们canNA替换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)

或者,使用dplyrtidyr::starts_with

library(dplyr)   
library(tidyr)
df %>% 
  mutate_at(vars(starts_with("Prefix")), coalesce,  0)
© www.soinside.com 2019 - 2024. All rights reserved.