我有两个数据帧
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之外,还有更优雅的方法。
环路?面板数据?
答案 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))