2014-06-10 19 views
2

我走过了论坛,但我无法找到我需要的东西,我无法做到。 我有这样的示例数据订购到新框架的框架列表

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的都吐出来。 任何建议或做法呢? 感谢

+0

的问题是,因为错误的源数据的编辑。现在很清楚我希望。谢谢 – Bury

+0

我写了一个简单的方法来为您发布的第一个数据集做到这一点,但我没有检查您的新更新。如果你想我可以发布解决方案的前一个数据集... –

+0

Theres在这里没有'Profit_L_2',但你仍然解析到'frame' –

回答

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]] 
+0

竖起大拇指!我必须学习很多,很好的代码。但它比我更高,因此我无法将其转换为新数据。谢谢 – Bury

+0

谢谢,它会更好。祝你有个愉快的日子 – Bury

+0

工作了几个小时后,我意识到这个解决方案在单个data.frames在列表中的行数不同的情况下不起作用。我无法理解结果,但现在我明白了。它从第一个矩阵重复相同数量的行。 1:在rep(seq_len(length(L))中,each = unique(sapply(L,nrow))): 使用'each'参数的第一个元素 2:在seq_len中(唯一的(sapply(L,nrow))) ): 使用'length.out'参数的第一个元素任何意见如何解决这个问题? – Bury