использование канала dplyr для удаления пустых столбцов в списке фреймов данных - PullRequest
2 голосов
/ 02 апреля 2020

У меня есть список фреймов данных:

DF

LIST <- список (df1 <- data.frame (col_a1 = c ( "a", "b"), col_b2 = c (NA, NA)), df2 <- data.frame (col_b2 = c ("a", "b"), col_b1 = c (NA , NA))) </p>

[[1]]
  col1 col2
1    a   NA
2    b   NA

[[2]]
  col2 col1
1    a   NA
2    b   NA

Я хотел бы удалить столбцы, в которых все записи являются NA, и выбрать те, которые содержат «1», используя каналы

Полученный кадр данных список

[[1]]
cola1
a
b

Я бы предпочел использовать каналы, чтобы упростить это. Следующий код - это то, что я пробовал:

LIST %>%
   map(~ .x %>% select(contains("1") & !all(is.na(.))))

1 Ответ

3 голосов
/ 02 апреля 2020

Вы можете использовать две select функции:

library(dplyr)
library(purrr)

LIST %>% map(~ .x %>% select(contains("1")) %>% select_if(!all(is.na(.))))


#[[1]]
#  col_a1
#1      a
#2      b

#[[2]]
#data frame with 0 columns and 2 rows

Используя только одну select функцию, мы можем сделать:

LIST %>% map(~ .x %>% select_if(str_detect(names(.x), '1') & 
                               colSums(!is.na(.x)) > 0))

И аналогично в базе R:

lapply(LIST, function(x) x[colSums(!is.na(x)) > 0 & grepl('1', names(x))])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...