将向量组合到数据框中,使用向量名称作为列

Combine vectors into data frame, using vector name as a column

library(dplyr)

我有一组向量:

Sp_A <- c("A",1,2,3,4,5,6,7,8)
Sp_B <- c("B",9,10,11,12,13,14,15,16)
Sp_C <- c("C",17,18,19,20,21,22,23,24)

我已将其制成向量列表:

list <- ls(pattern = "Sp_")

我想用这个列表来遍历列表中的每个向量,并把它变成一个数据框。我目前使用这个对一个向量执行此操作:

A_df <- select(data.frame(rep(Sp_A[1], each = 4), c(Sp_A[c(2,4,6,8)]), c(Sp_A[c(3,5,7,9)])), name = 1, var1 = 2, var2 = 3)

我试过将此操作变成一个 for 循环,如下所示:

for(i in list) {
    test[i] <- select(A_df <- data.frame(rep(i[1], each = 4),
                      c(i[c(2,4,6,8)]), 
                      c(i[c(3,5,7,9)]), 
                      name = 1, var1 = 2, var2 = 3))
}

但无济于事。

我听说我可以使用 apply() 来做这类事情,但我不知道怎么做。

也许是这样:

lapply(list,function(x) data.frame(name=get(x)[1],matrix(get(x)[-1],ncol = 2)))

[[1]]
  name X1 X2
1    A  1  5
2    A  2  6
3    A  3  7
4    A  4  8

[[2]]
  name X1 X2
1    B  9 13
2    B 10 14
3    B 11 15
4    B 12 16

[[3]]
  name X1 X2
1    C 17 21
2    C 18 22
3    C 19 23
4    C 20 24

或者将数据帧分配给对象的简单 for 循环:

for (x in 1:length(list)){
  assign(paste0("test",x),data.frame(name=get(list[x])[1],matrix(get(list[x])[-1],ncol = 2)))
}