从列表中的多个数据框中删除元素

时间:2019-04-12 12:36:29

标签: r

我有多个数据框,这些数据框已从电子表格读取到r中。所有数据帧都有相同的列,但是列中的某些观察值输入错误(在数据输入过程中),并且r将某些视为posixct,将其他视为整数和因子等。问题是rbindlist函数在某些机器上存在问题(它可能取决于data.table的版本)。好消息是,这个有问题的变量没有得到分析,可以删除。我该如何过滤列表中的多个数据框才能做到这一点?

我尝试了不同的代码,但似乎都无法在列表中的所有数据帧上正常工作。这是一些虚拟数据:

lst <- list(a = 1:4, b = 4:8, c = 8:10)
lst1 <- list(a = 1:4, b = 4:8, c = 8:10)

iist2<-list(lst, lst1)

if("b" %in% names(iist2)) iist2 <- iist2[ - which(names(iist2) == "b")]

但是,如果只是lst或lst1,则上述方法无效。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

您可以尝试

lapply(iist2, function(i)i[!names(i) %in% 'b'])

答案 1 :(得分:1)

我们可以使用discardkeep

library(purrr)
map(iist2, ~ keep(.x, names(.x) != "b"))
#[[1]]
#[[1]]$a
#[1] 1 2 3 4

#[[1]]$c
#[1]  8  9 10


#[[2]]
#[[2]]$a
#[1] 1 2 3 4

#[[2]]$c
#[1]  8  9 10