如何将Excel选项卡名称附加为最终数据帧R中的ID列



我使用以下代码从单个excel工作表导入多个选项卡。生成的df的名称与选项卡的名称相同;a";我们得到一个结果df";a";在R中及其内容。

sheetnames <- readxl::excel_sheets(raw.data.dir)
mylist <- lapply(readxl::excel_sheets(raw.data.dir), readxl::read_excel, path = raw.data.dir)
# name the dataframes
names(mylist) <- sheetnames
# Bring the dataframes to the global environment
list2env(mylist ,.GlobalEnv)

是否可以在结果DF中添加一列,并用选项卡/表格的名称填写?

可复制示例

a = data.frame(
y1 = c(1, 2, 3),
y2 = c(4, 5, 6)
)

b = data.frame(
y1 = c(7, 8, 9),
y2 = c(1, 4, 6)
)

sheetnames <- c("a","b")
mylist = list(a, b)
names(mylist) <- sheetnames
list2env(mylist ,.GlobalEnv)

这将返回df a:

y1    y2
1  1     4
2  2     5 
3  3     6

然后,我一直在手动将名称附加到df中,但我想将其自动化以获得以下内容:

y1    y2   id
1  1     4    a
2  2     5    a
3  3     6    a

但我希望它看起来像这样:

使用Map可以执行:

mylist <- Map(function(x, y) transform(x, id = y), mylist, names(mylist))
list2env(mylist ,.GlobalEnv)
#> <environment: R_GlobalEnv>
a
#>   y1 y2 id
#> 1  1  4  a
#> 2  2  5  a
#> 3  3  6  a
b
#>   y1 y2 id
#> 1  7  1  b
#> 2  8  4  b
#> 3  9  6  b

最新更新