将列表的每个组件转换为R中的不同数据帧

时间:2015-12-24 15:25:44

标签: r list dataframe

我有一个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脚本看起来整洁。

1 个答案:

答案 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)