[英]Dropping dataframes in a list based on column values
我有以下列表:
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
中刪除,但我沒有運氣。 請幫忙?
一種選擇是對數據集進行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)
這是解決您的問題的另一種方法:
ls[sapply(ls, function(X) !any(X[["b"]] %in% unwanted))]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.