Mam dużą ramkę danych (1616610 wierszy, 255 kolumn) i muszę wkleić unikalne wartości każdej kolumny na podstawie klucza.Agregacja wszystkich unikatowych wartości każdej kolumny ramki danych
Na przykład:
> data = data.frame(a=c(1,1,1,2,2,3),
b=c("apples", "oranges", "apples", "apples", "apples", "grapefruit"),
c=c(12, 22, 22, 45, 67, 28),
d=c("Monday", "Monday", "Monday", "Tuesday", "Wednesday", "Tuesday"))
> data
a b c d
1 1 apples 12 Monday
2 1 oranges 22 Monday
3 1 apples 22 Monday
4 2 apples 45 Tuesday
5 2 apples 67 Wednesday
6 3 grapefruit 28 Tuesday
Co potrzebne jest do agregowania każdą unikalną wartość w każdej z 255 kolumn, i powrócić nową ramkę danych z separatorami przecinkami dla każdej unikatowej wartości. Tak:
a b c d
1 1 apples, oranges 12, 22 Monday
2 2 apples 45, 67 Tuesday, Wednesday
3 3 grapefruit 28 Thursday
Próbowałem, używając aggregate
, tak:
output <- aggregate(data, by=list(data$a), paste, collapse=", ")
ale na ramce danych tej wielkości, to było zbyt czasochłonne (godziny), a często razy mam aby zabić proces razem. Oprócz tego będzie agregować wszystkie wartości, a nie tylko te niepowtarzalne. Czy ktoś ma jakieś wskazówki na temat:
1) jak poprawić czas tej agregacji dla dużych zbiorów danych
2), a następnie dostać unikalne wartości każdego pola
BTW, to jest mój pierwszy post na SO, więc dziękuję za cierpliwość.
dla tej wielkości, jesteś prawdopodobnie będzie potrzebował 'dane .tabela ". Nie jestem świetny ze składni, ale są tu ludzie, którzy są. – alistaire
dzięki @alistaire. Słyszałem dobre rzeczy o 'data.table' dla dużych zestawów danych i próbowałem z nim pracować, ale nie potrafię wymyślić składni tego problemu. – bab2155
Dzięki @ G.Grothendieck! To zadziałało dobrze – bab2155