2014-12-08 15 views
3

저는 새로운 R 사용자이고 StackOverflow를 처음 사용합니다. 최선의 방법으로 의사 소통을하지 않으면 간결하고 명시 적으로 사과하고 사과드립니다.다른 데이터 프레임의 행 순서에 따라 데이터 프레임의 행을 재정렬하십시오.

두 개의 데이터 프레임으로 작업하고 있습니다. 하나의 데이터 프레임의 행을 다시 정렬하여 두 번째 데이터 프레임의 행 순서와 동일하게하여 동일한 형식의 데이터를 다른 데이터 프레임에 추가 할 수 있습니다. 에 따라 행의 순서를 바꾸려는 열은 다른 관측 영역의 문자열 식별자가있는 열입니다. 나는 측면에서 두 번째 dataframe의 행 순서를 변경하려면

variable value 
DALZZ 2.14 
DALZZ 2.02 
DALZZ 2.04 
CBUCG 1.83 
CBUCG 2.09 
CBUCG 1.96 
CBUCG 1.98 
DAHEI 2.25 
DAHEI 2.05 
DAHEI 2.08 
DAFQX 2.12 
DAFQX 2.12 
DAFQX 2.04 
BAARG 2.12 
BAARG 2.56 
BAARG 2.56 

처럼

Variable Value 
DAFQX 9 
DAFQX 9 
DAFQX 9 
DAFQX 9 
DAHEI 9 
DAHEI 9 
DAHEI 9 
DAHEI 9 
BAARG 9  
BAARG 9  
BAARG 9 
BAARG 9 
CBUCG 9 
CBUCG 9 
CBUCG 9 
CBUCG 9 
DALZZ 9 
DALZZ 9 
DALZZ 9 
DALZZ 9 

두 번째 dataframe "dfmax"와 같은 (요약) 외모 "dfverif"첫 번째 dataframe 본다 첫 번째 데이터 프레임에서 문자 벡터의 행 순서 그러나 많은 시계열은 시계열 자료이므로 일치를 사용할 수 없으며 필요한 데이터를 보유하기 때문에 중복 된 문자열을 삭제할 수 없습니다. 또한 두 번째 데이터 프레임은 첫 번째 데이터 프레임보다 훨씬 작습니다 (원시 관측보다는 시계열 데이터의 최대 값입니다). 나는 cbind와 rbind의 한계를 알고 있지만 필요한 경우 rbind.fill과 cbindX를 사용할 수있다. 물론 그들이 여기 있는지는 모르겠지만. 사실이 데이터 프레임에는 더 많은 열이 있지만 여기에는 간결성을 위해 2 개만 포함되었습니다. 여기에 질문 Order data frame rows according to a target vector that specifies the desired order

을 바탕으로

그 코드

target <- dfverif 
idx <- sapply(target,function(x){ 
which(dfmax$variable==x) 
}) 
idx <- unlist(idx) ##I added this because the code gave me errors because idx is classified as a list so R couldn't do the dfmax[idx,] component 
dfmax <- dfmax[idx,] 
rownames(dfmist) <- NULL 
하지만 지금은 일을 시도 나는 내가

[1] V1 V2 
<0 rows> (or 0-length row.names) 

내가 할 수없는 어떤 수 (dfmax를) 머리를 수행 할 때 나는 str (dfmax)를 할 때 이전에 가지고 있던 것과 같은 순서의 문자 변수를 얻습니다. 아무 것도 변하지 않았습니다. 내가 틀린 나무를 짖고 있니? 이것에 접근하는 또 다른 방법이 있습니까? 아니면이 함수를 부적절하게 실행하려고합니까?

시간을내어 도와 주셔서 감사합니다.

답변

4

나는 match을 사용할 수 없습니다. 아마도 고유하지 않은 결과를 반환 할 것이지만 2 차 정렬이 필요하다는 것에 대해서는 말하지 않았고 그렇게했다면 order의 두 번째 인수로 쉽게 추가 할 수 있습니다. 필자는 variable 인스턴스 각각의 인스턴스가 하나 뿐인 두 번째 데이터 프레임의 다양한 하위 집합에 대해 테스트했습니다.

길이의 차이는 문제가되지 않습니다. 내가 지금 볼

d2[ order(match(d2$variable, d1$Variable)), ] 
    variable value 
11 DAFQX 2.12 
12 DAFQX 2.12 
13 DAFQX 2.04 
8  DAHEI 2.25 
9  DAHEI 2.05 
10 DAHEI 2.08 
14 BAARG 2.12 
15 BAARG 2.56 
16 BAARG 2.56 
4  CBUCG 1.83 
5  CBUCG 2.09 
6  CBUCG 1.96 
7  CBUCG 1.98 
1  DALZZ 2.14 
2  DALZZ 2.02 
3  DALZZ 2.04 
d1[ order(match(d1$Variable, d2$variable)), ] 

    Variable Value 
17 DALZZ  9 
18 DALZZ  9 
19 DALZZ  9 
20 DALZZ  9 
13 CBUCG  9 
14 CBUCG  9 
15 CBUCG  9 
16 CBUCG  9 
5  DAHEI  9 
6  DAHEI  9 
7  DAHEI  9 
8  DAHEI  9 
1  DAFQX  9 
2  DAFQX  9 
3  DAFQX  9 
4  DAFQX  9 
9  BAARG  9 
10 BAARG  9 
11 BAARG  9 
12 BAARG  9 
+0

만의 사용 : 여기에 내가 처음으로 (D2)의 순서 ('dfmax', 짧은) (이상 'dfverif')에 의해 (D1) 및 다음 (D2)에 의해 D1의 순서를 보여 순서 (일치 (,))는 여전히 성공해야합니까? –

+0

내 대답은 실제로 잘못된 결과를 만들어 내서 삭제했습니다. 너의 것은가는 길이다 :) –

+1

내가 만든 테스트 케이스에 잘 작동했다. 'dput (head (dfmax))'와'dput (head (dverif))의 출력을 질문에 편집으로 게시해야합니다. –

관련 문제