R中的新列是累积计数(相加)唯一日期

R中的新列是累积计数(相加)唯一日期,r,R,关于在大型数据集中(36000行)创建新的特定变量,我有一个问题。我想创建一个变量,它是累积的天数。例如: Date (dd/mm/yyyy) 01-01-2018 01-01-2018 02-01-2018 02-01-2018 02-01-2018 02-01-2018 03-01-2018 03-01-2018 我想创建以下数字变量,该变量按顺序计算唯一天数,因此: New Variable 1 1 2 2 2 2 3 3 所以,第一个唯一的日期是1,第二个唯一的日期是2,等等。我总共

关于在大型数据集中(36000行)创建新的特定变量,我有一个问题。我想创建一个变量,它是累积的天数。例如:

Date (dd/mm/yyyy)
01-01-2018
01-01-2018
02-01-2018
02-01-2018
02-01-2018
02-01-2018
03-01-2018
03-01-2018
我想创建以下数字变量,该变量按顺序计算唯一天数,因此:

New Variable
1
1
2
2
2
2
3
3
所以,第一个唯一的日期是1,第二个唯一的日期是2,等等。我总共有36000多个观测值,其中有1096个唯一的日期(三年)。所以我想要一个变量,第一个日期是1,第二个日期是2,最后一个日期是1096。但是,这些日期并不相同:一个唯一的日期可能出现30次,另一个唯一的日期出现50次

如何在R中创建这样的变量

两种方法:

  • 如果您确信订购正确,则可以使用:

    cumsum(c(TRUE, diff(x$Date) != 0))
    # [1] 1 2 2 3 4 4 5 5
    
  • 如果您不确定或只是想防范它,您可以借用
    factor
    s的存储方式:

    # randomize the data for this example
    set.seed(2)
    x <- x[sample(seq_len(nrow(x))),,drop=FALSE]
    x
    #         Date
    # 2 2018-01-01
    # 5 2018-01-02
    # 4 2018-01-02
    # 1 2018-01-01
    # 6 2018-01-02
    # 3 2018-01-02
    # 7 2018-01-03
    # 8 2018-01-03
    
    # this is the real work, works even if ordered
    x$NewVar <- as.integer(factor(x$Date))
    x
    #         Date NewVar
    # 2 2018-01-01      1
    # 5 2018-01-02      2
    # 4 2018-01-02      2
    # 1 2018-01-01      1
    # 6 2018-01-02      2
    # 3 2018-01-02      2
    # 7 2018-01-03      3
    # 8 2018-01-03      3
    
    # reorder for presentation here:
    x[order(x$NewVar),]
    #         Date NewVar
    # 2 2018-01-01      1
    # 1 2018-01-01      1
    # 5 2018-01-02      2
    # 4 2018-01-02      2
    # 6 2018-01-02      2
    # 3 2018-01-02      2
    # 7 2018-01-03      3
    # 8 2018-01-03      3
    
    #将此示例的数据随机化
    种子(2)
    
    x对不起,我注意到我已经交换了
    %d
    %m
    ,你的问题很清楚。代码没有改变,现在看起来更正确了。
    x <- read.table(stringsAsFactors=FALSE, header=TRUE, text="
    Date
    01-01-2018
    01-01-2018
    02-01-2018
    02-01-2018
    02-01-2018
    02-01-2018
    03-01-2018
    03-01-2018")
    x$Date <- as.Date(x$Date, format = "%d-%m-%Y")