我有一个excel文件,其中有多张纸,实际上是12张,相当于一年中的12个月。对于每张表,我都有英国每家医院的入院数据。我已经设法使用以下代码/函数在R中读取这些表:
library("readxl")
read_excel_allsheets <- function(filename) {
sheets <- readxl::excel_sheets(filename)
x <- lapply(sheets, function(X) readxl::read_excel(filename, sheet = X))
names(x) <- sheets
x
}
mysheet <- read_excel_allsheets("Daycase0809.xlsx")
执行该功能后,我基本上得到一个名为mysheet的列表,其中列表的每个组成部分(长度每年不同)对应于一年中每个月的入场数据。
我基本上想要的(到目前为止,我正在努力)是将列表的每个组件转换为所有12个组件的单个数据框对象。所以基本上会有12个数据帧对应12个月。
我已设法做到这一点,但效率很低,涉及编写12行R语句,如下所示:
Daycase_1_0809 <- as.data.frame(mysheet[[1]])
我想知道是否有更有效的方法。我想它与字符串和循环有关但我在R中相对较新。
之后,我使用数据进行描述和进一步分析,并将数据与其他数据合并。
我们非常感谢您的帮助,因为它可以让我按时节约,帮助我学习以备将来使用,也可以让我的R脚本看起来整洁。
答案 0 :(得分:3)
只是做:
lapply(mysheet, as.data.frame)
如果项目尚未data.frame
s。
要将data.frame
放入您的全球环境,您可以使用list2env
,但您应首先为列表项命名。
所以,方法就像:
list2env(
setNames(
lapply(mysheet, as.data.frame), c("A", "Vector", "of", "names")),
.GlobalEnv)