【问题标题】:I want to delete redundant lines in my table in R我想删除 R 表中的多余行
【发布时间】:2020-06-27 17:06:50
【问题描述】:

我有一个巨大的表格,每行有 2 位专业人员的信息,如下所示:

df1 <- data.frame("Date" = c(1,2,3,4), "prof1" = c(25,59,10,5), "prof2" = c(5,7,8,25))

#  Date  prof1  prf2
#1 1      25     5
#2 2      59     7
#3 3      10     8
#4 4      5      25
...      ...    ...

我想删除第 4 行,因为它与第 1 行相同,只是有备用值。

所以我创建了一个副本,该表的 B 和 C 列的值如下切换:

df2 <- data.frame("Date" = c(1,2,3,4), "prof2" = c(5,7,8,25), "prof1" = c(25,59,10,5))

#  Date  prof2  prof1
#1 1      5     25
#2 2      7     59
#3 3      8     10
#4 4      25    5
...      ...    ...

并执行了代码:

df1&lt;- df1[!do.call(paste, df1[2:3]) %in% do.call(paste, df2[2:3]), ]

但它最终也删除了第 1 行。给我这张桌子:

#  Date  prof2  prof1
#2 2      7     59
#3 3      8     10
...      ...    ...

我想要的是这样的:

#  Date  prof2  prof1
#1 1      5     25
#2 2      7     59
#3 3      8     10
...      ...    ...

如何只删除与另一行相似的行?

【问题讨论】:

    标签: r dataframe data-manipulation


    【解决方案1】:

    如果您不在乎保留哪一个副本,您可以确保
    prof2 > prof1,然后删除重复项。

    SWAP = which(df2$prof2 < df2$prof1)
    temp = df2$prof2
    df2$prof2[SWAP] = df2$prof1[SWAP]
    df2$prof1[SWAP] = temp[SWAP]
    
    df2 = df2[!duplicated(df2[,2:3]), ]
    df2
      Date prof2 prof1
    1    1    25     5
    2    2    59     7
    3    3    10     8
    

    【讨论】:

      【解决方案2】:

      我们可以使用apply 来循环遍历数据集的行,sort,它们得到转置,在其上应用duplicated 以获得逻辑向量和子集

      df1[!duplicated(t(apply(df1[-1], 1, sort))),]
      #    Date prof1 prof2
      #1    1    25     5
      #2    2    59     7
      #3    3    10     8
      

      或者另一个选项是pmin/pmax

      subset(df1, !duplicated(cbind(pmin(prof1, prof2), pmax(prof1, prof2))))
      #  Date prof1 prof2
      #1    1    25     5
      #2    2    59     7
      #3    3    10     8
      

      或者使用来自dplyrfilter

      library(dplyr)
      df1 %>%
          filter( !duplicated(cbind(pmin(prof1, prof2), pmax(prof1, prof2))))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-01-15
        • 2011-05-24
        • 1970-01-01
        • 2015-12-21
        • 1970-01-01
        • 2023-03-25
        • 2012-09-27
        相关资源
        最近更新 更多