假设我的列表中有以下data.frames
:
df_1 = data.frame(x = c(1,2,2,5,6), y = c(20,20,21,24,55), z = rnorm(5))
df_2 = data.frame(x = c(1,2,2,5,6), y = c(20,20,21,24,55), z = rnorm(5))
df_3 = data.frame(x = c(3,3,5,6), y = c(20,20,21,24), z = rnorm(4))
df_4 = data.frame(x = c(1,2,2), y = c(20,20,21), z = rnorm(3))
df_5 = data.frame(x = c(2,2,5,6), y = c(19,20,21,40), z = rnorm(4))
df_6 = data.frame(x = c(1,5,6), y = c(20,20,24), z = rnorm(3))
df_7 = data.frame(x = c(1,5,6), y = c(20,20,24), z = rnorm(3))
df_8 = data.frame(x = c(1,5,6), y = c(20,20,24), z = rnorm(3))
df_lst = list(df_1, df_2, df_3, df_4, df_5, df_6, df_7, df_8)
如您所见,df_1
和df_2
具有相同的x
和y
列,这同样适用于df_6
、df_7
和df_8
。
如何删除基于列x
和y
的重复data.frames
?
我不在乎删除了哪个df
,也就是说,它可以是df_1
或df_2
和df_6
与df_7
,或df_6
与df_8
,或df_7
与df_8
。
我的真实列表中有数千个data.frames
。
有什么建议吗?
这里有一种方法。。。
df_lst[!duplicated(lapply(df_lst, function(df) df[,c("x","y")]))]
[[1]]
x y z
1 1 20 -0.8043316
2 2 20 -1.0565257
3 2 21 -1.0353958
4 5 24 -1.1855604
5 6 55 -0.5004395
[[2]]
x y z
1 3 20 0.3509210
2 3 20 0.8633185
3 5 21 -0.4789113
4 6 24 -1.1884792
[[3]]
x y z
1 1 20 -0.26856637
2 2 20 -0.08022106
3 2 21 -0.12323569
[[4]]
x y z
1 2 19 -0.09943981
2 2 20 -0.83475398
3 5 21 1.85777954
4 6 40 -0.49839702
[[5]]
x y z
1 1 20 -1.2700546
2 5 20 -0.9369437
3 6 24 0.5334392
首先,它形成一个仅包括每个数据帧的列x
和y
的伪列表,使用该列表计算出重复项,然后从原始列表中删除相应的元素(保留每个元素的第一次出现(。