通过将变量存储在r中,将多个数据框组合成一个列表

时间:2019-04-17 03:34:53

标签: r list

我有3个数据框:

df1 <- read.table(text = "ID V1 V2 V3 V4
A 1 2 3 4
B 5 6 7 8
C 9 10 11 12", stringsAsFactors = FALSE, header = TRUE)

df2 <- read.table(text = "ID V1 V2 V3 V4
D 13 14 15 16
E 17 18 19 20
F 21 22 23 24", stringsAsFactors = FALSE, header = TRUE)

df3 <- read.table(text = "ID V1 V2 V3 V4
G 25 26 27 28
H 29 30 31 32
I 33 34 35 35", stringsAsFactors = FALSE, header = TRUE)

如何将这三个数据帧组合成一个列表,不仅使用list函数将它们组合,还存储变量。

当我查找某个变量时,除了看到它们被输入的数据帧分隔外,就像我的列表称为test

test[[ID]]
df1 df2 df3
A D G
B E H
C F I

test[[V1]]
df1 df2 df3
1 13 25
5 17 29
9 21 33

1 个答案:

答案 0 :(得分:3)

我同意@neilfws的观点,因为这似乎是您想要的一种不寻常的结构。也许您应该退后一步,重新考虑您想对下游数据做什么,以及是否有更好的结构可以实现该目标。

此外,您可以通过以下方式生成这样的结构

首先,将各个data.frame存储在一个名为list中。

lst <- list(df1 = df1, df2 = df2, df3 = df3)

然后以下内容再现了您的预期输出

setNames(
    lapply(seq_along(lst[[1]]), function(idx) sapply(lst, function(x) x[, idx])),
    names(lst[[1]]))
#$ID
#     df1 df2 df3
#[1,] "A" "D" "G"
#[2,] "B" "E" "H"
#[3,] "C" "F" "I"
#
#$V1
#     df1 df2 df3
#[1,]   1  13  25
#[2,]   5  17  29
#[3,]   9  21  33
#
#$V2
#     df1 df2 df3
#[1,]   2  14  26
#[2,]   6  18  30
#[3,]  10  22  34
#
#$V3
#     df1 df2 df3
#[1,]   3  15  27
#[2,]   7  19  31
#[3,]  11  23  35
#
#$V4
#     df1 df2 df3
#[1,]   4  16  28
#[2,]   8  20  32
#[3,]  12  24  35

这假定所有data.frame都具有相同的列结构。