【问题标题】:Split, apply, and combine multiple data frames into one data frame将多个数据帧拆分、应用和组合成一个数据帧
【发布时间】:2013-12-26 21:08:18
【问题描述】:

我已经完成了一个起点-终点成本矩阵(23 个起点,约 600,000 个终点),用于在 ArcGIS 中通过街道网络,并使用 Python 脚本按商店 ID 将生成的矩阵分解为 DBF 表。我已将每个 DBF 表加载到 R 会话中,如下所示:

# Import OD cost matrix results for each store
origins <- read.dbf('ODM_origins.dbf')
store_17318 <- read.dbf('table_17318.dbf')
store_17358 <- read.dbf('table_17358.dbf')
store_17601 <- read.dbf('table_17601.dbf')
store_17771 <- read.dbf('table_17771.dbf')
store_18068 <- read.dbf('table_18068.dbf')
store_18261 <- read.dbf('table_18261.dbf')
store_18289 <- read.dbf('table_18289.dbf')
store_18329 <- read.dbf('table_18329.dbf')
store_18393 <- read.dbf('table_18393.dbf')
store_18503 <- read.dbf('table_18503.dbf')
store_18522 <- read.dbf('table_18522.dbf')
store_19325 <- read.dbf('table_19325.dbf')
store_19454 <- read.dbf('table_19454.dbf')
store_20068 <- read.dbf('table_20068.dbf')
store_20238 <- read.dbf('table_20238.dbf')
store_20292 <- read.dbf('table_20292.dbf')
store_20435 <- read.dbf('table_20435.dbf')
store_20465 <- read.dbf('table_20465.dbf')
store_20999 <- read.dbf('table_20999.dbf')
store_22686 <- read.dbf('table_22686.dbf')
store_22715 <- read.dbf('table_22715.dbf')
store_24445 <- read.dbf('table_24445.dbf')
store_24446 <- read.dbf('table_24446.dbf')
ID <- as.vector(origins$Name) # Create list of store IDs
object_list <- list(ls(pat="store_")) # Create list of DBF object names

这是每个数据框的布局:

> head(store_17318)
  OID_          NAME ORIGINID DESTINATIO DESTINAT_1 TOTAL_TRAV SHAPE_LENG
1    0 17318 - 17318       25       5367          1  0.2056914   202.2393
2    0 17318 - 17318       25       5368          2  0.2056914   202.2393
3    0 17318 - 17318       25       5381          5  0.2432538   224.3947
4    0 17318 - 17318       25       5382          6  0.2432538   224.3947
5    0 17318 - 17318       25       5362          7  0.3670772   294.8987
6    0 17318 - 17318       25       5363          8  0.3670772   294.8987

对于每个数据框,我想按商店 ID 查找旅行时间的汇总统计信息(平均值,SD),并将其写入新的数据框。这似乎是一个标准的拆分、应用、组合工作流程,但它涉及拆分多个对象。对此问题的任何帮助将不胜感激。

【问题讨论】:

  • 那么每个商店只有一个文件?例如,您想要为这 23 个对象中的每一个对象提供 mean(store_17318$TOTAL_TRAV) 吗?每一个都是独立的,它只是一列的简单总结(均值/方差)?
  • 有很多方法可以做这种事情;最快的一般是data.table 包。有关摘要和一些基准,请参阅here

标签: r split dataframe apply dbf


【解决方案1】:

你可以使用sapply:

res <- sapply(ls(pattern = "store_"), function(x) {
  tmp <- get(x)$TOTAL_TRAV
  c(mean = mean(tmp), SD = sd(tmp))
})

这将返回一个矩阵。列代表商店 ID。这两行包含平均值和标准差。

您可以使用

将此矩阵转换为(转置)数据框
as.data.frame(t(res))

在这里,两列包含均值和标准差。行名称代表商店 ID。

【讨论】:

  • 谢谢,我是 R 的初学者,我没想过将 ls(pat) 包含在 sapply 中。再次感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-31
  • 2013-11-16
相关资源
最近更新 更多