我对在大型数据集(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中创建这样的变量?
答案 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")