2014-06-10 3 views
2

나는 물마루가있는 포럼에 갔지만, 나는 내가 필요로하는 것을 excatly 찾을 수 없으며 할 수 없습니다. 내가 예를 내가 변수 중 하나를 주문하려는 데이터 프레임을 새 프레임으로 주문하십시오.

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의이 엎드려 바랍니다. 조언이나 접근 방법은 무엇입니까? 감사

+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), ] 

합니다. 이제 나는 희망이 분명하다. 감사합니다. – Bury

+0

게시 한 첫 번째 데이터 세트에 대해이 작업을 수행하는 간단한 방법을 썼지 만 새 업데이트를 확인하지 않았습니다. 원하는 경우 이전 데이터 세트에 대한 솔루션을 게시 할 수 있습니다 ... –

+0

Theres는 여기에 'Profit_L_2'가 없지만 여전히 '프레임'으로 구문 분석합니다. –

답변

0

내가 좋아하는 뭔가를 할 거라고 : 문제 때문에 잘못된 소스 데이터의 편집 한

 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 행 수가 다른 경우에 작동하지 않는다는 것을 깨달았다. 나는 결과를 이해할 수 없었지만, 이제 나는 그것을 본다. 첫 번째 행렬에서 같은 수의 행을 반복합니다. 'each'인수의 첫 번째 요소가 사용됨 2 : seq_len (unique (sapply (L, nrow))에서 1 : rep (seq_len (length (L)) : 첫 번째 요소는 'length.out'인수를 사용합니다.이 문제를 해결하는 방법에 대한 조언이 있습니까? – Bury

관련 문제