如果我在全局环境中有5个数据帧,例如a,b,c,d和e
我希望将数据帧a与e进行比较,如果R在a和e中找到任何公共元素,则删除a中的元素。然后我希望将数据框b与e进行比较,并删除公共元素,依此类推。
实际上我有20张表需要与e进行比较。
任何人都可以提供一些优雅的方法来解决此问题吗?我在考虑循环或函数,但无法解决细节。
感谢大家,度过愉快的一天!
答案 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)