vol=list() ;df=data.frame(name=c(5,2,15,4),name=c(2,0,1,2))
vol[[1]] <- dplyr::lst(!! names(df)[1] := df)
df2=data.frame(dat=c(5,2,15,4),dat=c(2,0,1,2))
vol[[2]] <- dplyr::lst(!! names(df2)[1] := df2)
如何将此列表(vol(转换为如下的adata框架:
A Par var
name 5 2
name 2 0
name 15 1
name 4 2
dat 5 2
dat 2 0
dat 15 1
dat 4 2
在与map_dfr
绑定之前,我们可能需要将list
中的列名修改为commmon名称('Par','var'(。由于它是嵌套的list
,(如果它是嵌套列表,则首先为flatten
(,然后进行更改。如果我们需要内部列表名称作为列,请使用.id
创建具有列表名称的列
library(dplyr)
library(purrr)
vol2 %>%
map_dfr(~ .x %>% rename_all(~ c("Par", "var")), .id = "A")
-输出
A Par var
1 name 11 17
2 name 23 12
3 name 94 123
4 name 32 11
5 name 7 117
6 B.Ch 11 10
7 B.Ch 96 10
8 B.Ch 8 10
9 B.Ch 68 133
10 B.Ch 5 1167
或者在base R
中使用相同的方法,用c
压平,用lapply
在list
上循环以重命名,然后用Map
和cbind
创建一列,最后用rbind
创建list
元素
lst1 <- lapply(vol2, setNames, c("Par", "var"))
dat <- do.call(rbind, Map(cbind, A = names(lst1), lst1))
row.names(dat) <- NULL
-输出
> dat
A Par var
1 name 11 17
2 name 23 12
3 name 94 123
4 name 32 11
5 name 7 117
6 B.Ch 11 10
7 B.Ch 96 10
8 B.Ch 8 10
9 B.Ch 68 133
10 B.Ch 5 1167
数据
vol2 <- list(name = structure(list(name = c(11, 23, 94, 32, 7), name.1 = c(17,
12, 123, 11, 117)), class = "data.frame", row.names = c(NA, 5L
)), B.Ch = structure(list(B.Ch = c(11, 96, 8, 68, 5), B.Ch.1 = c(10,
10, 10, 133, 1167)), class = "data.frame", row.names = c(NA,
5L)))