【问题标题】:Data.table do differenced operation with date RData.table 对日期 R 进行差异操作
【发布时间】: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


【解决方案1】:

您不需要循环或应用,只需使用公司组的diff

setkey(dtA, Date, Company)
dtA[, list(diff = diff(Data), Date = Date[-1]), by = Company]
#    Company diff   Date
# 1:   compA   -2 200101
# 2:   compA    1 200102
# 3:   compB   -2 200101
# 4:   compB    2 200102
# 5:   compC   -4 200101
# 6:   compC   -2 200102

使用这些数据:

dtA = fread("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")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-12
    • 2018-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-22
    • 2013-10-03
    • 2011-12-14
    相关资源
    最近更新 更多