【问题标题】:Removing duplicate Values in Dataframe in R删除R中Dataframe中的重复值
【发布时间】:2015-04-22 15:32:56
【问题描述】:

我有一个具有重复值的数据框。看起来是这样的

5   Bernadette  Mendez    F 581916  13  72  68  73  75  84  72  68  77  65  71  70
6   Bobbie  Stanley   M 347045  13  87  89  86  89  88  87  95  87  89  88  NA
7   Casey   Gonzalez  M 732776  13  78  89  99  95  89  85  94  94  98  97  95
8   Cheryl  Silva     F 382579  15  91  91  86  99  89  90  96  88  95  40  NA
9   Cheryl  Silva     F 382579  15  91  91  86  99  89  90  96  88  95  88  90
10  Crystal Armstrong F 815414  16  86  84  86  76  81  87  85  91  81  81  NA
11  Doris   Russell   F 861836  14  89  96  97  78  94  97  86  92  90  99  90

我想根据第五列删除重复的行,并在最后一个字段为“NA”的重复行中保留一行。

我可以使用重复的方法删除重复的行。但我无法设定保留哪一行的条件。

【问题讨论】:

    标签: r


    【解决方案1】:

    按最后一列排序,将 NA 值放在最后:

    df1 <- df1[order(df1[,ncol(df1)], na.last = TRUE), ]
    

    没有重复的第 5 列(从最后开始):

    df1[!duplicated(df1[,5], fromLast = TRUE), ]
    

    【讨论】:

      【解决方案2】:

      如果你不想像duplicated那样使用

      df[!duplicated(df[, 2:3]), ] # keep first Cheryl
      df[!duplicated(df[, 2:3], fromLast = TRUE), ] # keep last Cheryl
      

      您可以拆分、应用和重新组合,例如喜欢:

      tmp <- split(df, apply(df[, 2:3], 1, paste, collapse = " ")) # split data frame on names
      idx <- sapply(tmp, nrow) > 1 # identify duplicates
      tmp[idx] <- lapply(tmp[idx], function(df) df[is.na(df[, ncol(df)]), ]) # keep those with NA in last col 
      do.call(rbind, tmp) # bind split data frames together again
      

      看起来不是很好,但给你更多的灵活性。

      【讨论】:

        猜你喜欢
        • 2018-04-08
        • 1970-01-01
        • 2022-01-13
        • 2016-08-16
        • 1970-01-01
        • 2023-03-28
        • 2016-05-31
        • 2021-05-13
        • 1970-01-01
        相关资源
        最近更新 更多