在 data.tables 列表中操作

Operating across a list of data.tables

虽然这对某些人来说似乎是一项简单的任务,但作为 R 的初学者,它一直令人沮丧!任务如下。我有一个包含以下列的 table:

colnames(gov_data)
 [1] "year"               "quarter"            "employed"          
 [4] "newhires"           "separations"        "jobscreated"       
 [7] "jobsdestroyed"      "state"              "mw"                
[10] "teen_wage"          "teen_pop"           "adult_wage"        
[13] "teen_share_working" "unemp_primemale"    "recession"         
[16] "period" 

使用 state_list<-split(gov_data, gov_data$state) 我现在有一个 data.tables 对应于每个州的列表。在每个 data.tables 中,我想按日期排序。我是这样做的。如果这样效率低下,我欢迎您的替代方案!

orderfun <- function (x) {
  x[order(period)]
}

lapply(state_list, orderfun)

我现在想添加一个标记为“change_mw”的列,它对应于“mw”列中的更改。我知道如何对单个 data.table 执行此操作。我会创建一个滞后的列,因此它的值是 t-1 中的“mw”,然后计算这两列之间的差异: one_table[,`:=` (mw_t_minus_1 = shift(mw,n=1,type="lag"), change_mw = mw - mw_t_minus_1) ][, mw_t_minus_1 = NULL ] 如何跨列表中的多个 data.tables 执行此操作?在这种情况下甚至可以使用 data.table [i,j,by] 吗?你将如何完成这项任务?再次感谢您的帮助!

这是一个类似的例子,我可以通过适当的演示数据来更接近

library(data.table)
dtCars <- data.table(mtcars, keep.rownames=TRUE)

dtCars[order(hp), change:= hp-shift(hp), by=cyl]