我使用以下代码从单个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