【发布时间】:2015-08-12 17:30:37
【问题描述】:
我有一个包含许多数据帧的列表,我有一个矩阵表示感兴趣列的索引位置,每一行代表每个连续的数据帧。我正在尝试根据矩阵对该列表中的每个数据框进行子集化。
df1 <- data.frame(id=letters[1:4], result1=1:4, result2=1:4, result3=1:4)
df2 <- data.frame(id=letters[1:4], result1=5:8, result2=1:4, result3=1:4)
df3 <- data.frame(id=letters[1:4], result1=9:12, result2=1:4, result3=1:4)
df4 <- data.frame(id=letters[1:4], result1=13:16, result2=1:4, result3=1:4)
dflist <- list(df1, df2, df3, df4)
indices <- matrix(c(1,1,1,1,2,2,4,3),nrow=4, ncol=2)
所以数据框看起来像这样:
[[1]]
id result1 result2 result3
1 a 1 1 1
2 b 2 2 2
3 c 3 3 3
4 d 4 4 4
[[2]]
id result1 result2 result3
1 a 5 1 1
2 b 6 2 2
3 c 7 3 3
4 d 8 4 4
[[3]]
id result1 result2 result3
1 a 9 1 1
2 b 10 2 2
3 c 11 3 3
4 d 12 4 4
[[4]]
id result1 result2 result3
1 a 13 1 1
2 b 14 2 2
3 c 15 3 3
4 d 16 4 4
索引矩阵是这样的
[,1] [,2]
[1,] 1 2
[2,] 1 2
[3,] 1 4
[4,] 1 3
从第一个数据框中,我想对第 1 列和第 2 列进行子集化,从第二个数据框中我想要第 1、2 列,从第三个数据框中,我想要第 1 列和第 4 列,等等。
我可以使用以下方法一一实现:
dflist[[1]][indices[1,]]
但我想不出一个办法一次性完成所有工作(我试过 lapply() 和 sapply() 没有运气)
【问题讨论】: