【问题标题】:Eliminate duplicates in R [duplicate]消除R中的重复项[重复]
【发布时间】:2023-03-10 17:56:01
【问题描述】:

如果我有这样的 df

data<-data.frame(id=c(1,1,3,4),n=c("x","y","e","w"))
data
  id n
1  1 x
2  1 y
3  3 e
4  4 w

我想得到一个像这样的新df:

data
  id n
3  3 e
4  4 w

也就是说,我希望它删除所有重复的行。我已经尝试过 dplyr 中的 distinct 之类的函数,但它总是得到重复行之一。

【问题讨论】:

    标签: r


    【解决方案1】:

    另一个subset 选项与ave

    subset(
        data,
        ave(n, id, FUN = length) == 1
    )
    

    给予

      id n
    3  3 e
    4  4 w
    

    【讨论】:

      【解决方案2】:

      我们可能需要duplicated

      subset(data, !(duplicated(id)|duplicated(id, fromLast = TRUE)))
        id n
      3  3 e
      4  4 w
      

      或使用table

      subset(data, id %in% names(which(table(id) == 1)))
        id n
      3  3 e
      4  4 w
      

      【讨论】:

        【解决方案3】:

        只需使用dplyr 解决方案添加已经有用的答案即可。

        library(dplyr)
        
        data %>% filter(
                !(duplicated(id,fromLast = FALSE) | duplicated(id,fromLast = TRUE) )
        )
        

        distinct 对您不起作用,因为它会保留 all 不同的值,在您的情况下,id 始终是其中的一部分。

        【讨论】:

          【解决方案4】:

          虽然比较冗长,但也可以使用base R。

          data[!(duplicated(data["id"])|duplicated(data["id"], fromLast=TRUE)),]
          

          输出

            id n
          3  3 e
          4  4 w
          

          或使用dplyr

          library(dplyr)
          
          data %>%
              dplyr::group_by(id) %>%
              dplyr::filter(n() == 1) %>%
              dplyr::ungroup()
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-09-30
            • 1970-01-01
            • 1970-01-01
            • 2016-10-10
            • 1970-01-01
            • 2020-02-27
            • 2017-09-21
            • 2018-08-07
            相关资源
            最近更新 更多