【发布时间】:2017-05-22 12:39:41
【问题描述】:
我在这里看到了很多关于矢量化 for 循环的问题,但找不到任何涉及矢量化 for 循环以根据下面一行中单元格的值填充单元格的问题(如果我'道歉'我只是瞎了眼……)。
我有一个数据框,其中包含 160 万行薪水以及每个人开始赚取该薪水的日期。每个人可以有多个薪水,因此可以有多个行,每个行都有不同的更新日期。
虚拟数据集的代码如下:
df1 <- data.frame("id" = c(1,1,2,2,3,3,4,4,5,5,6,6),
"salary" = c(15456,16594,
17364,34564,
34525,33656,
23464,23467,
16794,27454,
40663,42743),
"start_date" = sample(seq(as.Date('2016/01/01'),as.Date(Sys.Date()), by="day"), 12))
df1 <- df1[order(df1$id,df1$start_date),]
我想为每个薪水创建一个包含结束日期的列,该日期计算为后续薪水条目的前一天。如果没有后续的工资条目,则将其设置为今天的日期。这是我的代码,包括一个 for 循环,可以做到这一点:
df1$end_date <- Sys.Date()
for (i in 1:(nrow(df1)-1)){
if(df1[i,1]== df1[i+1,1]){
df1[i,4] <- df1[i+1,3]-1
}
print(i)
}
但是,我知道 for 循环不是最有效的方法,但我将如何对其进行矢量化?
【问题讨论】:
标签: r for-loop data.table vectorization