Подмножество списка фреймов данных, содержащих имя столбца c - PullRequest
5 голосов
/ 13 февраля 2020

У меня есть список фреймов данных, и я хотел бы получить столбец x из каждого фрейма данных в виде строки.

testing <- list(data.frame(A = "Yes", B = "No"),
                data.frame(B = "No", C = "No"),
                data.frame(A = "Yes"))

Я могу напечатать, какой из фреймов данных имеет colname A в их, но я не смог подключиться к поднабору исходного тестирования

lapply(testing, function(x) "A" %in% colnames(x))

Желаемый вывод

[[1]]
    A  B
1 Yes No

[[2]]
    A
1 Yes

Ответы [ 3 ]

7 голосов
/ 13 февраля 2020

Другой базовый вариант: Filter

out <- Filter(function(x) "A" %in% names(x), testing)
out
#[[1]]
#    A  B
#1 Yes No
#
#[[2]]
#    A
#1 Yes
5 голосов
/ 13 февраля 2020

Мы можем использовать sapply для создания логического vector и подмножества

testing[sapply(testing, function(x) "A" %in% colnames(x))]
4 голосов
/ 13 февраля 2020

Один параметр, включающий purrr, может быть:

keep(testing, ~ any(grepl("A", names(.), fixed = TRUE)))

[[1]]
    A  B
1 Yes No

[[2]]
    A
1 Yes

Или:

keep(testing, ~ sum(names(.) == "A") != 0)

Если желаемый вывод действительно должен иметь столбец A, возвращаемый в виде строки, с добавление dplyr:

map(keep(testing, ~ any(grepl("A", names(.), fixed = TRUE))), ~ .x %>%
     pull(A) %>%
     as.character())

[[1]]
[1] "Yes"

[[2]]
[1] "Yes"

Или:

map(keep(testing, ~ sum(names(.) == "A") != 0), ~ .x %>%
     pull(A) %>%
     as.character())
...