Удаление фреймов данных в списке на основе значений столбцов - PullRequest
1 голос
/ 06 мая 2020

У меня есть следующий список:

df1 <- data.frame(a = rnorm(20), b = 010037)
df2 <- data.frame(a = rnorm(20), b = 010038)
df3 <- data.frame(a = rnorm(20), b = 010039)
df4 <- data.frame(a = rnorm(20), b = 010040)

ls <- list(df1, df2, df3, df4)

Моя цель - удалить выбранные кадры данных на основе значения в столбце b.

unwanted <- c(010037, 010038)
sapply(ls, "[", "b") %in% unwanted

Итак, df1 и df2 будет сброшено с ls, но мне это не повезло. Помогите пожалуйста?

Ответы [ 2 ]

1 голос
/ 07 мая 2020

Вот еще один способ решить вашу проблему:

ls[sapply(ls, function(X) !any(X[["b"]] %in% unwanted))]
1 голос
/ 06 мая 2020

Один из вариантов: subset набор данных, а затем Filter

out <- Filter(nrow, lapply(ls, subset, subset = !b %in% unwanted))
length(out)
#[1] 2

Или с discard

library(purrr)
map_lgl(ls, ~ all(.x$b %in% unwanted)) %>% 
     discard(ls, .)

Или с bind_rows и group_split

library(dplyr)
bind_rows(ls) %>% 
   filter(!b %in% unwanted) %>% 
   group_split(b)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...