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

时间:2017-02-02 15:02:54

标签: r for-loop apply data-manipulation

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()来做这类事情,但我不知道如何做。

1 个答案:

答案 0 :(得分:1)

也许这个:

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)))
}