在R

时间:2019-11-18 22:06:07

标签: r excel dataframe import

我正在尝试导入多个excel工作簿文件,每个文件由6张纸组成,并将它们连接到单个R data.frame中。我有多个工作簿文件(wb1.xlsx),每个文件由6张纸(1、2、3、4、5和6)组成。每个工作簿中的每个工作表都具有相同的名称(例如,在wb1.xlsx和wb2.xlsx中,两个文件中的第一工作表称为工作表1)。此外,每张工作表在其他每张工作表和其他工作簿中都具有相同的标题头集(例如wb1中的工作表1和wb2中的工作表2具有相同的标题)。

我尝试使用rio包中的import_list函数:

library(rio)

DF <- import_list(dir(pattern = ".xlsx"), rbind = TRUE)

但是,这仅导入每个excel工作簿的第一张表。我想从excel工作簿文件中导入每个工作表。

此外,我想在数据框中创建一列,其中包含从中导入元素的excel工作簿文件的名称(例如,从wb1.xlsx导入的所有元素的列,称为wb1.xlsx)。

1 个答案:

答案 0 :(得分:0)

这里是一种解决方案,您只需要指定工作簿数和每个wb的工作表数即可。

library(XLConnect)
library(purrr)

number_of_sheets <- 6 
number_of_wbs <- 100
DF <- map_dfc(1:number_of_wbs, function(x) {
  wb <- loadWorkbook(paste0("wb",x,".xlsx"))
  tables <- map_df(1:number_of_sheets,function(y) readWorksheet(wb,
                                          sheet = paste0("Sheet",y)))
  colnames(tables) <- paste0("wb",x,".xlsx")
  return(tables)
} 
)

在我的模拟示例中,我有2个wb:

第一本工作簿的Sheet1包含:

header1
0.706206019
0.929864738
0.820188853
0.822880906
0.986846159
0.201870111
0.295824333
0.682271283
0.918636814
0.308713375
0.620041348
0.396961295
0.592918544
0.813379311
0.679918546
0.149930842
0.344765206
0.454569802
0.439798642
0.79660039

第二个工作簿的Sheet1包含:

header1
0.359145063
0.97889235
0.561966441
0.560005392
0.37039449
0.827651329
0.428239882
0.684086633
0.376406956
0.67482297
0.088475246
0.843315296
0.478772685
0.431786377
0.213058341
0.570395357
0.418874778
0.270617596
0.0852233
0.894443579

最后的输出是这样的数据帧:

> DF
     wb1.xlsx    wb2.xlsx
1  0.74550551 0.324916411
2  0.76288674 0.503682245
3  0.98223947 0.426830680
4  0.90170329 0.813966804
5  0.56008503 0.680455280
6  0.45745945 0.001716535
7  0.14974342 0.089871648
8  0.23033300 0.362305799
9  0.57763394 0.426019894
10 0.04268935 0.055268297
11 0.26225496 0.903003228
12 0.58454780 0.836464347
13 0.43491035 0.393890841
14 0.18667029 0.147720392
15 0.81738619 0.653991709
16 0.45968982 0.209427777
17 0.13967637 0.274640492
18 0.25768938 0.522425832
19 0.66174385 0.722621747
20 0.49010581 0.689067647