2015-01-07 3 views
-1

У меня есть потребность, которую, я думаю, может быть удовлетворена 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

Пока вы пытались понять, что вы пробовали? Пожалуйста, опубликуйте код и покажите, где он поступил неправильно. –

+0

Извините мою лень (или, может быть, это было очень запутано некоторое время назад), но я нашел решение. Это было очень просто ... – Galled

ответ

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 
+4

Не привык делать 'data.frame (cbind (...))' - использовать 'data.frame (Name, car_colour)' непосредственно или иначе все ваши числовые данные могут конец принудительно к символьным данным. Кроме того, если вы укажете 'stringsAsFactors = FALSE' при выполнении' data.frame() ', вы можете пропустить' as.character() ' – thelatemail

0

Быстрый, супер ужасный метод!

Я сделал пример, называемый тестом.

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) 

Я думаю, что кто-то другой может иметь менее глупый способ получить тот же ответ. Я с радостью поддержу кого-то, кто это сделает!

Смежные вопросы