代码之家  ›  专栏  ›  技术社区  ›  aaaaa

r-根据多个data.frame列在列表中查找相等的元素并将其删除

  •  0
  • aaaaa  · 技术社区  · 6 年前

    让我们假设我有以下几点 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 ?

    我不在乎哪个 df 已删除,即它可以是 df_1 df_2 df_6 df_7 df_6 df_8 df_7 df_8

    我真正的名单上有成千上万的人 数据帧

    有什么建议吗?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Andrew Gustar    6 年前

    这里有一个方法。。。

    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