R中的新列是累积计数(相加)唯一日期
关于在大型数据集中(36000行)创建新的特定变量,我有一个问题。我想创建一个变量,它是累积的天数。例如: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,等等。我总共
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
- 如果您不确定或只是想防范它,您可以借用
s的存储方式: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
#将此示例的数据随机化 种子(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")