我有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
答案 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
都具有相同的列结构。