【发布时间】:2018-01-26 18:28:18
【问题描述】:
您好,我有一个 data.table 格式的数据集。让我们称之为 dtA:
Date Company Data
200012 compA 3
200012 compB 4
200012 compC 7
200101 compA 1
200101 compB 2
200101 compC 3
200102 compA 2
200102 compB 4
200102 compC 1
我想为每个日期、每个公司做减法。
所以最终的结果是:
Date Company Data
200102 compA 1
200102 compB 2
200102 compC -2
200101 compA -2
200101 compB -2
200101 compC -4
我写了一个冗长而庞大的代码来做到这一点,无论如何我可以在 data.table 中使用 lapply 函数吗? 我似乎不明白如何在 data.table 中使用 lapply。当 lapply 没有迭代器时,我无法遍历日期...
这是我的代码:
date=as.data.table(c("200012","200101", "200102"))
comp=as.data.table(c("compA","compB","compC"))
result=NA
date=date[-order(date)] #so it go decenting order
for (i in 1:(nrow(date)-1)){
d1=date[i]
d2=date[i+1]
dtA1=dtA[Date==d1][order(Company)]
dtA2=dtA[Date==d2][order(Company)]
ans.temp=merge(dtA1,dtA2, on=c("Date","Company"))
ans.temp=ans.temp[,Data := Data.x - Data.y, by="Company"]
ans.temp=ans.temp[,-c(3,4,5)]
if (is.NA(result)[1]){
result=ans.temp
} else{
result=rbind(result, ans.temp)
}
}
【问题讨论】:
-
dtA[, list(diff = diff(Data), Date = Date[-1]), by = Company]?无需循环或应用。 -
非常感谢 Greg 我又学到了一个新东西!差异()!
标签: r data.table lapply