我有一个需要,我认为可以通过aggregate
或reshape
来满足,但我无法弄明白。
我有一个名字列表,其中包含拥有每个人的汽车颜色。此数据为长形式,因此名称可以有多种颜色。我想用名字融合并获得最大颜色。
例如,
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
我将如何做到这一点?
答案 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)
我认为其他人可能会采用不那么愚蠢的方式来达到相同的答案。我很高兴地赞成一个单行的人!