【问题标题】:Removing duplicated rows from data frame with repect to specific columns and date in R [duplicate]从数据框中删除与 R 中特定列和日期相关的重复行 [重复]
【发布时间】:2017-03-06 20:57:59
【问题描述】:

我想删除 a b 列具有相同值的行。此外,唯一行应包含重复项的最新日期(c 列)。例如:

> a <- c(rep("A", 3), rep("B", 3), rep("C",2))
> b <- c(1,1,2,4,1,1,2,2)
> c <- c("2016-10-01", "2016-10-02", "2016-10-03", "2016-10-04", "2016-10-04", "2016-10-05", "2016-10-06", "2016-10-07")
> df <-data.frame(a,b,c)
> df
  a b          c
1 A 1 2016-10-01
2 A 1 2016-10-02
3 A 2 2016-10-03
4 B 4 2016-10-04
5 B 1 2016-10-04
6 B 1 2016-10-05
7 C 2 2016-10-06
8 C 2 2016-10-07

我想得到以下数据框:

  a b          c
1 A 1 2016-10-02
3 A 2 2016-10-03
4 B 4 2016-10-04
5 B 1 2016-10-05
6 C 2 2016-10-07

这是我目前尝试过的:

> df[!(duplicated(df$a, df$b)| 
+         duplicated(df$a, df$b, fromLast=TRUE)),]
  a b          c
1 A 1 2016-10-01
2 A 1 2016-10-02
3 A 2 2016-10-03
4 B 4 2016-10-04
5 B 1 2016-10-04
6 B 1 2016-10-05

【问题讨论】:

  • 这个问题好像跟统计没什么关系,最好还是去 Stack Overflow 问问。也就是说,我认为您正在寻找的是df[!duplicated(df[c("a", "b")], fromLast = T), ] - 它假设您的数据已经按列c 排序,至少在任何给定的a,b 组合中。
  • 请不要跨帖。这将在 Stack Overflow 上讨论,所以如果您等待,我们将为您迁移它。您也可以删除它。

标签: r


【解决方案1】:

您首先要进行排序,然后再进行选择。

df <- df[ order(df[['c']]), ]
small_df <- df[ !duplicated(df[c('a','b')], fromLast=TRUE)), ]

【讨论】:

    【解决方案2】:

    你可以简单地拥有:

    df$c <- as.character(df$c)
    aggregate(c~a+b, df, max)
    
      a b          c
    1 A 1 2016-10-02
    2 B 1 2016-10-05
    3 A 2 2016-10-03
    4 C 2 2016-10-07
    5 B 4 2016-10-04
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-04
      • 2016-11-02
      • 2021-10-14
      • 2020-04-03
      • 2021-10-09
      • 1970-01-01
      • 2020-12-01
      • 2015-11-03
      相关资源
      最近更新 更多