在 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]
虽然这对某些人来说似乎是一项简单的任务,但作为 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]