【问题标题】:Column of sequence with repeated elements based on column with dates [duplicate]基于日期列的具有重复元素的序列列[重复]
【发布时间】:2017-12-19 06:00:37
【问题描述】:

考虑一个按日期列排序的数据框:

df=data.frame(event=1:12,
              subject=rep("M325",12),
              date=c(rep("2017-11-01",4),rep("2017-11-14",8)))

我想要的是创建第四列,其序列从 1 到下一个唯一日期,序列中的每个元素在每个 i-th 日期重复。例如:

   event subject       date num
1      1    M325 2017-11-01   1
2      2    M325 2017-11-01   1
3      3    M325 2017-11-01   1
4      4    M325 2017-11-01   1
5      5    M325 2017-11-14   2
6      6    M325 2017-11-14   2
7      7    M325 2017-11-14   2
8      8    M325 2017-11-14   2
9      9    M325 2017-11-14   2
10    10    M325 2017-11-14   2
11    11    M325 2017-11-14   2
12    12    M325 2017-11-14   2

非常感谢在 n 个日期获得此结果的任何建议。

【问题讨论】:

  • 尝试df$num <- cumsum(!duplicated(df$date)),如果它是有序的,如果它是基于“日期”的块,以后可能会再次出现,然后num也发生变化,setDT(df)[, num := rleid(date)]
  • @akrun 哇,真快!第一个工作完美!谢谢

标签: r dataframe seq rep


【解决方案1】:

尽管@akrun 给出了答案

df$num <-cumsum(!duplicated(df$date))

或使用data.table:

setDT(df)[, num := rleid(date)]

速度更快,this answer using rle 确实可以解决我的问题。

【讨论】:

    猜你喜欢
    • 2014-02-17
    • 2012-02-13
    • 1970-01-01
    • 2020-11-09
    • 1970-01-01
    • 2011-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多