вспомогательная функция в R - PullRequest
0 голосов
/ 09 марта 2020

Я пытаюсь заменить NA на 0 для некоторых специфических c переменных независимо от их положения. я написал код ниже, но получаю некоторую ошибку ..

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, но Я все еще получаю эту ошибку, может кто-нибудь помочь мне в этом вопросе.

1 Ответ

1 голос
/ 09 марта 2020

Поскольку вы не предоставили 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

Просто знайте, что только потому, что мы можем заменить NA s на 0, не означает мы должны . Я полагаю, у вас есть веская причина , почему NA s должно быть 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)
...