【问题标题】:Merging Excel sheets in a workbook to make panel data table with time and firms as indices在工作簿中合并 Excel 工作表以制作以时间和公司为索引的面板数据表
【发布时间】:2016-06-16 12:40:56
【问题描述】:

我想为 R 中的面板数据回归创建一个面板数据表。我有一个工作簿,每张表都包含一个公司的变量(总共 5 张表,所以 5 家公司)。每个公司的变量都是相同的。频率是每天。我想要一个以公司和时间为指标的单一面板数据表,以便我可以为每个公司获取变量的年度平均值并进行面板数据回归。我一直在运行以下代码:

sheets<- c("BOB", "RIL",  "GAIL", "ITC", "MM")for (x in 1:5)  {df <- bind_rows(df, read.xlsx(path, sheet=sheets[x] ), .id= "Firm")}

但上面的代码只取第一张表,创建值始终为 1 的公司列,并将日期列创建为未知数字。我也试过以下代码:

df <- bind_rows(read.xlsx(path, sheets[x]), .id= "Firm")

但它返回相同的结果。似乎代码只能访问工作簿中的第一张工作表。请提出解决此问题的方法。以下是工作簿的链接:workbook

【问题讨论】:

  • 考虑在 R 中导入所有工作表并在那里转换数据。 R 中提供了许多重塑、变异、转置操作。请发布示例数据以获取可重复的示例。
  • @Parfait 我已经上传了所需的数据。谢谢

标签: r excel data-manipulation panel-data


【解决方案1】:

这使用readxl 包。 xlsx 包不喜欢您文件中的某些内容并引发错误。

library("readxl")
sheets<- c("BOB", "RIL",  "GAIL", "ITC", "MM")
df <- NULL
for (sheet in sheets){
  tmp <- read_excel(path, sheet=paste0(sheet, " IS Equity"))
  tmp$firm <- rep(sheet, nrow(tmp))
  df <- rbind(df, tmp)
}

【讨论】:

  • 我怀疑您的工作表格式不一样。列名和数据类型应该相同。我将编辑我的代码以添加一个 id 列。
  • 如果没有要测试的文件,我就无能为力了。
  • 我已经编辑了我的答案。 xlsx 包不喜欢你的文件。 readxl 包运行良好。
  • 谢谢你,@cory。像您这样的人使这个网站成为一个美好的地方。
  • sheet 参数可以采用索引或工作表名称。所以你可以说for(sheet in 1:500){ ... read_excel(path, sheet=sheet)
猜你喜欢
  • 2018-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-03
  • 2015-09-07
  • 1970-01-01
  • 1970-01-01
  • 2018-09-12
相关资源
最近更新 更多