簡體   English   中英

根據列值在列表中刪除數據框

[英]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

因此, df1df2將從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_rowsgroup_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM