2014-09-10 7 views
0

으로 표시 값으로 값을 대체와 같은 "합병"R 내가라는 테이블이 인덱스

Nationality CustomerID_count ClusterId 
1 argentina   1   1 
2 ARGENTINA   26   1 
3 ARGENTINO   1   1 
4 argentona   1   1 
5 boliviana   14   2 
6 paragauy   1   3 
7 paraguay   1   3 
8 PARAGUAY   1   3 

내가 각 클러스터 내에서 Customer_ID_count의 최대 값을 찾고, 새로운 국적 열을 작성해야합니다.

는 다음 코드와이 다른 테이블을했다 :

merged1<-data.table(merged) 
merged2<-merged1[, which.max(CustomerID), by = ClusterId] 

그리고 내가 가지고 : 그 후

ClusterId V1 
1:   1 2 
2:   2 1 
3:   3 1 

을 내가 병합했던 :

tot<-merge(x=merged, y=merged2, by= "ClusterId", all.x=TRUE) 

을 그리고 내가있어 다음 표 :

ClusterId Nationality CustomerID V1 
1   1 argentina   1 2 
2   1 ARGENTINA   26 2 
3   1 ARGENTINO   1 2 
4   1 argentona   1 2 
5   2 boliviana   14 1 
6   3 paragauy   1 1 
7   3 paraguay   1 1 
8   3 PARAGUAY   1 1 

그러나 끝내는 방법을 몰랐습니다. 나는 이것을 시도했다 :

tot[,5]=tot[V1,5] 

각 열에 대해 V1 행에 표시된 행의 국적을 갖고 싶기 때문에. 이것은 작동하지 않았다.

어떻게 마지막 부분을 수행 할 수 있습니까? 그리고 이것을 해결할 더 좋은 방법이 있습니까?

감사합니다.

답변

1

참고가 최대 값 ("파라과이"의 예를 들어 모든 버전과 일치하는 둘 이상의 CustomerID_countCustomerID_count ==이있을 수 있습니다 (1) 이는 해당 클러스터의 최대 값입니다.

그것은 plyr 패키지를 사용하여 매우 쉽게 :

library(plyr) 
ddply(merged, .(ClusterId), mutate, Nationality2 = Nationality[CustomerID_count == max(CustomerID_count)]) 
1

이 dplyr`에 대한 좋은 사용의 경우의 수 :

library(dplyr) 


merged <- merged %>% 
      group_by(ClusterId) %>% 
      mutate(newNat=Nationality[CustomerID_count == max(CustomerID_count)]) %>% 
      ungroup 

print(merged) 

##  Source: local data frame [8 x 4] 
## 
## Nationality CustomerID_count ClusterId newNat 
## 1 argentina    1   1 ARGENTINA 
## 2 ARGENTINA    26   1 ARGENTINA 
## 3 ARGENTINO    1   1 ARGENTINA 
## 4 argentona    1   1 ARGENTINA 
## 5 boliviana    14   2 boliviana 
## 6 paragauy    1   3 paragauy 
## 7 paraguay    1   3 paraguay 
## 8 PARAGUAY    1   3 PARAGUAY 
관련 문제