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

时间:2018-12-04 18:48:48

标签: 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多个观测值,其中有1096个唯一日期(三年)。所以我想要一个变量,它的第一个日期为1,第二个日期为2,最后一个日期为1096。但是,日期显示不均:一个唯一的日期可能出现30次,另一个唯一的日期出现50次。

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

1 个答案:

答案 0 :(得分:2)

两种方法:

  • 如果您确定它们的订购正确,则可以使用:

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

    # 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
    

数据:

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")