Как мне заменить_на несколько списков - PullRequest
1 голос
/ 18 февраля 2020

Мне нужно заменить NA на FALSE в нескольких списках. Я могу сделать это самым простым способом. Вот что у меня есть -

mydataframe$POBA<-replace_na(mydataframe$POBA,FALSE)
mydataframe$POBA2<-replace_na(mydataframe$POBA2,FALSE)
mydataframe$POBA3<-replace_na(mydataframe$POBA3,FALSE)

Есть ли способ объединить все три, чтобы уменьшить код? Использовать For L oop или ссылаться на диапазон столбцов?

Просто начал учить себя R, и я пробовал несколько вариантов, но ни один из них, похоже, не работает.

Ответы [ 2 ]

1 голос
/ 18 февраля 2020

Мы можем использовать mutate_at

library(dplyr)
mydataframe <- mydataframe %>%
                mutate_at(vars(starts_with("POBA)), replace_na, FALSE)

В версии devel dplyr, across можно использовать в mutate

mydataframe %>%
     mutate(across(starts_with("POBA"), replace_na, FALSE))
0 голосов
/ 18 февраля 2020

Вы можете использовать семейство apply для этого

lapply(mydataframe, replace_na, FALSE)

Примечание. Это приведет к изменению всех столбцов и возврату объекта списка. Это может быть легко преобразовано в data.frame снова с as.data.frame(), если вам это нужно.

mydataframe <- data.frame(POBA = c(TRUE,TRUE,NA), 
                          POBA2 = c(TRUE, NA, TRUE), 
                          POBA3 = c(NA, TRUE, TRUE))
lapply(mydataframe, tidyr::replace_na, FALSE)
# $POBA
# [1]  TRUE  TRUE FALSE
# 
# $POBA2
# [1]  TRUE FALSE  TRUE
# 
# $POBA3
# [1] FALSE  TRUE  TRUE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...