我有一个名为“merged”的表,如:
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列所示行中的国籍。这没用。
我怎样才能完成最后一部分?还有更好的解决方法吗?
谢谢!
答案 0 :(得分: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
答案 1 :(得分:1)
请注意,您可能有多个CustomerID_count
与最大值匹配(例如,所有版本的“paraguay”都有CustomerID_count
== 1,这是该群集的最大值。)
使用plyr
包很容易:
library(plyr)
ddply(merged, .(ClusterId), mutate, Nationality2 = Nationality[CustomerID_count == max(CustomerID_count)])