【问题标题】:How to check whether two rows have an equal value pr id for a dataframe in R [duplicate]如何检查R中数据帧的两行是否具有相等的值pr id [重复]
【发布时间】:2020-11-27 21:37:54
【问题描述】:

我有一个数据框,我想检查每个 id 的特定列是否存在重复值。如何识别重复行,不仅在 id 上重复,而且在“值”列上重复?

df <- data.frame('id' = c('1','1', '2', '3', '3', '4','5','5','5'), "value" = c('apple','apple', 'orange', 'banana', 'banana',  'apple','orange','banana','orange'), "shop" = c('supermarket','café', 'café', 'supermarket', 'café',  'supermarket','supermarket','supermarket','café'))

我的方法是

#extract duplicates in the dataframe on value
df_dup <- df[duplicated(df$value), ]
#from this df, extract duplicates on id
df_dup1 <- df_dup[duplicated(df_dup$id), ]

但是这种方法不起作用。我正在寻找的输出是一个简化的数据框,其中只有在“值”列上具有重复值的 id 与数据框中的其他变量保持在一起:

df_exp <- data.frame('id' = c('1','1','3', '3', '5','5'), "value" = c('apple','apple', 'banana', 'banana', 'orange','orange'), "shop" = c('supermarket', 'café', 'supermarket', 'café' ,'supermarket','café'))

提前致谢!

【问题讨论】:

    标签: r dataframe duplicates subset


    【解决方案1】:

    我们也可以使用重复:

    df[duplicated(df[,1:2])|duplicated(df[,1:2], fromLast =TRUE),]
    

    【讨论】:

    • @sindri_baldur 你不需要粘贴
    • @sindri_baldur 检查我的答案。数据帧有一个duplicated 方法。你实际上不需要粘贴。您上面的评论使用incomparables 参数
    【解决方案2】:

    您可以选择行数大于 1 的组(idvalue)。

    使用dplyr,您可以:

    library(dplyr)
    df %>% group_by(id, value) %>% filter(n() > 1)
    
    # id    value  shop       
    #  <chr> <chr>  <chr>      
    #1 1     apple  supermarket
    #2 1     apple  café       
    #3 3     banana supermarket
    #4 3     banana café       
    #5 5     orange supermarket
    #6 5     orange café       
    

    或者data.table

    library(data.table)
    setDT(df)[, .SD[.N > 1], .(id, value)]
    

    【讨论】:

    • dplyr 解决方案在 250.000 行的数据帧上最快。
    【解决方案3】:

    这是使用subset + ave 的基本 R 选项

    subset(df,ave(1:nrow(df),id,value, FUN = length)>1)
    

    给了

      id  value        shop
    1  1  apple supermarket
    2  1  apple        café
    4  3 banana supermarket
    5  3 banana        café
    7  5 orange supermarket
    9  5 orange        café
    

    【讨论】:

      猜你喜欢
      • 2013-10-07
      • 1970-01-01
      • 2019-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-27
      • 2016-11-14
      • 1970-01-01
      相关资源
      最近更新 更多