通过唯一标识符进行聚合并将唯一值放入字符串中

时间:2015-01-07 01:30:48

标签: r

我有一个需要,我认为可以通过aggregatereshape来满足,但我无法弄明白。

我有一个名字列表,其中包含拥有每个人的汽车颜色。此数据为长形式,因此名称可以有多种颜色。我想用名字融合并获得最大颜色。

例如,

Name    car_colour 
Euler       blue
Gauss       red
Hilbert     white
Hilbert     green
Knuth       yellow
Knuth       orange
Knuth       cyan
Knuth       violet
Knuth       darkblue

会变成......

Name        car_color 
Euler       blue
Gauss       red
Hilbert     green
Knuth       cyan

我将如何做到这一点?

2 个答案:

答案 0 :(得分:1)

很抱歉,但答案非常简单:

> Name=c('Euler','Gauss','Hilbert','Hilbert','Knuth','Knuth','Knuth','Knuth','Knuth')
> car_colour=c('blue','red','white','green','yellow','orange','cyan','violet','darkblue')
> nc=as.data.frame(cbind(Name,car_colour))
> nc
     Name car_colour
1   Euler       blue
2   Gauss        red
3 Hilbert      white
4 Hilbert      green
5   Knuth     yellow
6   Knuth     orange
7   Knuth       cyan
8   Knuth     violet
9   Knuth   darkblue
> nc.agg <- aggregate( as.character(car_colour) ~ Name, nc, FUN = "min")
> nc.agg
     Name as.character(car_colour)
1   Euler                     blue
2   Gauss                      red
3 Hilbert                    green
4   Knuth                     cyan

答案 1 :(得分:0)

快速,超级糟糕方法!

我做了一个名为test的例子。

test
letter color   
[1,] "a"    "blue"  
[2,] "a"    "red"   
[3,] "a"    "red"   
[4,] "b"    "orange"
[5,] "c"    "green" 


testTable=table(test[,1], test[,2])
testNames=colnames(testTable)[apply(testTable,1,which.max)]
testOut=data.frame(letter=unique(test[,1]), color=testNames)

我认为其他人可能会采用不那么愚蠢的方式来达到相同的答案。我很高兴地赞成一个单行的人!