【问题标题】:Find duplicated rows based on 2 columns and selecte the first and last rows in Data Frame根据 2 列查找重复行并选择数据框中的第一行和最后一行
【发布时间】:2020-08-05 08:56:29
【问题描述】:

我有一个这样的数据框

uuid  item   timestamp     value
  1    1     2020-07-15      1
  1    1     2020-08-16      2
  1    2     2020-07-15      2
  1    2     2020-07-15      2
  1    2     2020-08-16      3
  2    1     2020-07-18      1
  2    1     2020-07-18      2
  2    1     2020-08-16      2
  2    1     2020-08-17      3
  2    2     2020-07-18      1
  2    2     2020-08-11      2
  2    2     2020-08-17      1

参加者每题完成2次以上,我想选择最早完成和最晚完成的回答作为测试和重新测试。结果数据可以这样显示:

uuid  item   timestamp     value
  1    1     2020-07-15      1
  1    1     2020-08-16      2   
  1    2     2020-07-15      2
  1    2     2020-07-15      2   (deplicated row)
  1    2     2020-08-16      3
  2    1     2020-07-18      1
  2    1     2020-07-18      2   (deplicated row)
  2    1     2020-08-16      2   (deplicated row)
  2    1     2020-08-17      3
  2    2     2020-07-18      1
  2    2     2020-08-11      2   (deplicated row)
  2    2     2020-08-17      1

要达到我的目标,我该怎么做?

【问题讨论】:

    标签: r date duplicates multiple-columns


    【解决方案1】:

    一个dplyr 选项可以是:

    df %>%
     mutate(timestamp = as.Date(timestamp, format = "%Y-%m-%d")) %>%
     group_by(uuid, item) %>%
     slice(c(which.min(timestamp), which.max(timestamp)))
    
       uuid  item timestamp  value
      <int> <int> <date>     <int>
    1     1     1 2020-07-15     1
    2     1     1 2020-08-16     2
    3     1     2 2020-07-15     2
    4     1     2 2020-08-16     3
    5     2     1 2020-07-18     1
    6     2     1 2020-08-17     3
    7     2     2 2020-07-18     1
    8     2     2 2020-08-17     1
    

    【讨论】:

    • @Qinglan 请随意accept one of the answer,点击投票按钮旁边的复选标记最适合您:-) 每个帖子只能接受一个答案。
    • 嗨,tmfmnk。我想将结果保留在 df 中,但我发现 df 在执行此操作后有更多行(247769 到 303046):df.allS9 &lt;- df.allS9 %&gt;% mutate(timestamp = as.Date(timestamp, format = "%Y-%m-%d")) %&gt;% group_by(uuid,item)%&gt;% dplyr::slice(c(which.min(timestamp),which.max(timestamp)))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-10
    • 2016-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多