繁体   English   中英

时间序列:为子集编写代码的最有效方法是什么?

[英]Time series: What's the most efficient way to write code for subsets?

我有两个数据框

DF1

time x   y   state
...  ... ... CA
...  ... ... MA
...  ... ... TX
...  ... ... MA
...  ... ... CA
...  ... ... IL

DF2

time x   y   state
...  ... ... MA
...  ... ... NY
...  ... ... MA
...  ... ... TX
...  ... ... CA
...  ... ... CA

然后,我有了一些代码,在这些代码中,我可以汇总每月值,重命名列,将数据与另一个列表进行匹配,然后将df1和df2合并为大约50行代码中的一个。 到目前为止,我不考虑state

但是,我需要为几个美国州创建合并数据框的子集。 除了复制/粘贴用于df1和df2的代码并将df1和df2替换为df1_CA,df2_MA等之外,还有其他更优雅的方法吗?

环? 面板数据?

一种选择是使用data.table包进行分组分析。

# transform your data.frame to data.table
dt1 <- as.data.table(df1)
dt2 <- as.data.table(df2)

# e.g. grouping values on state level
dt1[, sum(y), by=state]
# this will accumulate all y values by state

如果您不想在代码中替换df名称,则可以定义一个函数:

# define the function
accumulate <- function(df){
  dt <- as.data.table(df)
  return(dt[, sum(y), by=state])
}

# and call it 
accumulate(df1)
accumulate(df2)

而不是在所有data.frames上使用for循环或类似方法,可以使用一种有效遍历数据结构(例如列表)的apply函数之一

# alternatively define a list of data.frames and then iterate over the list
my.dfs <- list(df1,df2)
lapply(my.dfs, accumulate(df))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM