R,如何一次处理多个数据框

时间:2018-06-21 11:21:52

标签: r dataframe

如果我在全局环境中有5个数据帧,例如a,b,c,d和e

我希望将数据帧a与e进行比较,如果R在a和e中找到任何公共元素,则删除a中的元素。然后我希望将数据框b与e进行比较,并删除公共元素,依此类推。

实际上我有20张表需要与e进行比较。

任何人都可以提供一些优雅的方法来解决此问题吗?我在考虑循环或函数,但无法解决细节。

感谢大家,度过愉快的一天!

1 个答案:

答案 0 :(得分:1)

最简单的方法是将所有要比较的数据框放在list中,然后使用lapply遍历此列表:

# create list of data.frames
dlist <- list(df1 = data.frame(var1 = 1:10), df2 = data.frame(var1 = 11:20),
              df3 = data.frame(var1 = 21:30), df4 = data.frame(var1 = 31:40))

# create master-data.frame
set.seed(1)
df <- data.frame(var1 = sample(1:100, 30))

# use lapply() to loop over the data and exclude all elements that are in the master-data.frame
dlist <- lapply(dlist, function(x){
  x <- x[!x$var1 %in% df$var1, , drop = FALSE]
})

结果:

> dlist
$df1
  var1
2    2
3    3
4    4
5    5
7    7
8    8
9    9

$df2
  var1
1   11
2   12
3   13
4   14
5   15
8   18

$df3
   var1
2    22
3    23
4    24
6    26
10   30

$df4
   var1
1    31
3    33
5    35
6    36
8    38
9    39
10   40

如果您绝对需要全局目录中的数据框,则可以使用list2env

list2env(dlist, envir = .GlobalEnv)