我正在使用的数据框有两列:1)人员ID和2)日期。我正在尝试为每个人分配日期的数字日值。
例如,人员1的日期为2016年1月1日(基准)至2016年1月5日(人员1的最后日期)。我想创建一个将其转换为1、2、3、4、5的天列。如果人2的日期为2016-01-13至2016-01-16,则人2的天列将为1, 2、3、4。
df <- for(i in length(unique(per1$date))){df$day[per1$date[1] + i] <- i+1}
这基本上是我想要做的,但是我收到一条错误消息:
“替换有17119行,数据有1670”
请让我知道如何编写此代码。谢谢。
答案 0 :(得分:0)
您可以使用
library(data.table)
## Create Data
df <- data.table(personID = c(1,1,1,2,2,2,2),
Date = c("2016-01-01", "2016-01-02", "2016-01-03", "2016-01-13", "2016-01-14", "2016-01-15", "2016-01-16"))
## Order the data according to date, per user
df <- df[order(Date), .SD, by = personID]
## Rank the date, within each personID group
df <- df[, Day:= 1:.N, .(personID)]
df
personID Date Day
1: 1 2016-01-01 1
2: 1 2016-01-02 2
3: 1 2016-01-03 3
4: 2 2016-01-13 1
5: 2 2016-01-14 2
6: 2 2016-01-15 3
7: 2 2016-01-16 4