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

时间:2017-09-01 11:23:26

标签: r dataframe subset

我有两个数据帧

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_CA,df2_MA等替换df1和df2之外,还有更优雅的方法。

环路?面板数据?

1 个答案:

答案 0 :(得分:1)

一种选择可以是使用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循环或类似,可以使用其中一个有效迭代数据结构的应用函数,例如:列表

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