Замените NA в столбцах с указанными c именами переменных - PullRequest
1 голос
/ 05 марта 2020

У меня есть датафрейм с 14 столбцами. 12 столбцов заканчиваются именем переменной .T, и я хочу заменить NA только на 0 в этих столбцах. Я пытался использовать mutate_if(), как предложено в этом сообщении , но я получаю сообщение об ошибке Error: No tidyselect variables were registered Call rlang :: last_error () to see a backtrace.

Мой код (с примерами данных) выглядит следующим образом:

 library(tibble)

 mydf <- tribble(~Var1, ~Var2.a, ~Var3.a,
                 "A", NA, 1,
                 NA, NA, NA,
                 "C", 3, 3,
                 NA, NA, NA)

 newdf <- mydf %>%
   mutate_if(contains(".a"), ~replace_na(., 0))

Ошибка: переменные tidyselect не были зарегистрированы. Вызовите rlang::last_error(), чтобы увидеть обратную трассировку

Я бы хотел использовать dplyr, если это возможно.

Ответы [ 4 ]

3 голосов
/ 05 марта 2020

вы должны использовать mutate_at:

newdf <- mydf %>%
   mutate_at(vars(matches("\\.a")), ~replace_na(., 0))
3 голосов
/ 05 марта 2020

Вы должны использовать mutate_at, также включить имя столбца в vars()

library(dplyr)
mydf %>% mutate_at(vars(contains(".a")), replace_na, 0)

#  Var1  Var2.a Var3.a
#  <chr>  <dbl>  <dbl>
#1 A          0      1
#2 NA         0      0
#3 C          3      3
#4 NA         0      0
2 голосов
/ 05 марта 2020

В базе R вы можете использовать grep.

r <- grep("\\.a", names(mydf))
mydf[r][is.na(mydf[r])] <- 0

# # A tibble: 4 x 3
#   Var1  Var2.a Var3.a
#   <chr>  <dbl>  <dbl>
# 1 A          0      1
# 2 NA         0      0
# 3 C          3      3
# 4 NA         0      0
1 голос
/ 05 марта 2020

Самый простой способ - это использовать is.na. Например:

df$x[is.na(df$x] <- 0

Вы также можете сделать это для нескольких столбцов одновременно, используя df [, 2: 6] (например, столбцы со 2 по 6)

...