我有两个数据框
df1
time x y state
... ... ... CA
... ... ... MA
... ... ... TX
... ... ... MA
... ... ... CA
... ... ... IL
df2
time x y state
... ... ... MA
... ... ... NY
... ... ... MA
... ... ... TX
... ... ... CA
... ... ... CA
然后我有一些代码,我在其中聚合每月值、重命名列、将数据与另一个列表匹配,然后在大约 50 行代码中将 df1 和 df2 合并为一个。这里,我暂时不考虑state
。
但是,我需要为美国的几个州创建合并数据框的子集。除了复制/粘贴用于 df1 和 df2 的代码并用 df1_CA、df2_MA 等替换 df1 和 df2 之外,还有其他更优雅的方法吗?
环形?面板数据?
一种选择是使用 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))
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句