将帧列表导入新帧

时间:2014-06-10 10:34:32

标签: r list

我去了论坛,但我找不到我需要的东西而且我无法做到。 我有这个示例数据

A<-c(1,4,2,6,9,-5,-2,-5)
B<-c(-4,-1,4,10,3.5,2.9,-1.4,0.5)
AA<-data.frame(A,B,C,D)
C<-c(3,1.3,5.4,-4.3,5.5,2.5,-6.4,8.2)
D<-c(-2.4,-4.3,2.4,5.4,1.2,9.3,7.4,-4.1)
E<-c(0.4,2.4,5.6,2.8,4.5,2.9,3.3,8.1)
BB<-data.frame(C,D,E,G)
colnames(BB)<-c("A","B","C","D")
G<-c(1.4,2.5,-3.2,-6.3,8.2,-7.4,-0.3,1.1)
CC<-data.frame(E,G,A,B)
colnames(CC)<-c("A","B","C","D")
L<-list(AA,BB,CC)
L

我想通过其中一个变量来订购它,我做了这个

ordered<-lapply(L,function(x) x[order(x$B,decreasing=TRUE),])
ordered

但问题是这个解决方案是分别订购每一帧。 我需要的是一个新的框架,其中是整个列表中的有序数据。 它表示列中的有序值(在本例中为B)以及有关此变量的位置(列表中的列表和行)的行的信息。 它会像这样

              A    B    C    D
[[1]] [[4]]   6    10  -4.3  5.4
[[2]] [[6]]   2.5  9.3  2.9  -7.4

在这种情况下

等等, 注意:我在原始数据中有一些NA,所以我希望NA会保持不变。 有任何建议或方法吗? 感谢

1 个答案:

答案 0 :(得分:0)

我做的事情如下:

dat <- suppressWarnings(data.frame(sapply(names(L[[1]]) , function(x) unlist(L)[grep(x, names(unlist(L)))])))
dat$Location <- paste(paste0("[[", rep(seq_len(length(L)), each = unique(sapply(L, nrow))), "]]"), paste0("[[", rep(seq_len(unique(sapply(L, nrow))), length(L)), "]]"))
dat <- dat[order(-dat$B), ]

哪个给出了

      A    B    C    D    Location
4   6.0 10.0 -4.3  5.4 [[1]] [[4]]
14  2.5  9.3  2.9 -7.4 [[2]] [[6]]
21  4.5  8.2  9.0  3.5 [[3]] [[5]]
15 -6.4  7.4  3.3 -0.3 [[2]] [[7]]
12 -4.3  5.4  2.8 -6.3 [[2]] [[4]]
3   2.0  4.0  5.4  2.4 [[1]] [[3]]
5   9.0  3.5  5.5  1.2 [[1]] [[5]]
6  -5.0  2.9  2.5  9.3 [[1]] [[6]]
18  2.4  2.5  4.0 -1.0 [[3]] [[2]]
11  5.4  2.4  5.6 -3.2 [[2]] [[3]]
17  0.4  1.4  1.0 -4.0 [[3]] [[1]]
13  5.5  1.2  4.5  8.2 [[2]] [[5]]
24  8.1  1.1 -5.0  0.5 [[3]] [[8]]
8  -5.0  0.5  8.2 -4.1 [[1]] [[8]]
23  3.3 -0.3 -2.0 -1.4 [[3]] [[7]]
2   4.0 -1.0  1.3 -4.3 [[1]] [[2]]
7  -2.0 -1.4 -6.4  7.4 [[1]] [[7]]
9   3.0 -2.4  0.4  1.4 [[2]] [[1]]
19  5.6 -3.2  2.0  4.0 [[3]] [[3]]
1   1.0 -4.0  3.0 -2.4 [[1]] [[1]]
16  8.2 -4.1  8.1  1.1 [[2]] [[8]]
10  1.3 -4.3  2.4  2.5 [[2]] [[2]]
20  2.8 -6.3  6.0 10.0 [[3]] [[4]]
22  2.9 -7.4 -5.0  2.9 [[3]] [[6]]