Izabela R.

Izabela R. Analityk danych

Temat: Z cyklu "pytania banalne" - agregacja :)

Witam,

zapewne jest to bardzo proste pytanie dla speców od R-a - jak zrobić w R to, co SPSS robi poniższą, bardzo prostą komendą?

AGGREGATE
/OUTFILE="file.sav"
/BREAK=CLIENT
/data_kontakt=max(datak)
/N_kontaktow=N.


Załóżmy że mam plik z dwoma kolumnami - pierwsza zawiera nieunikalne nazwy klientów (CLIENT), druga zawiera daty kontaktów (datak) z danym klientem. Chciałabym zagregować to tak, żeby uzyskać 3 kolumny:
- unikalną nazwę klienta,
- datę ostatniego kontaktu (max),
- liczbę wszystkich dotychczasowych kontaktów.

:)Izabela R. edytował(a) ten post dnia 29.03.10 o godzinie 13:00

Temat: Z cyklu "pytania banalne" - agregacja :)

http://www.statmethods.net/management/aggregate.html

Sam nie próbowałem, ale myślę, że powinno cię to zadowolić.
Wojciech Sobala

Wojciech Sobala Redaktor
statystyczny,
biostatystyk,
Instytut Medycyny
Pr...

Temat: Z cyklu "pytania banalne" - agregacja :)

Najprościej jest zainstalować pakiet doBy.
W tym pakiecie jest funkcja summaryBy.
summaryBy(datak~CLIENT,data=dane,FUN=c(MAX=max,Nkontakow=length))

Funkcja ta zwraca wynik jako data frame z nazwami zmiennych po prawej stronie formuły+nazwa funkcji (tutaj MAX i Nkontaktow) + zmienna grupująca.

Przed wywołanie funkcji trzeba się upewnić, że daty są przechowywane w formacie daty a nie tekstowym.

Temat: Z cyklu "pytania banalne" - agregacja :)

W razie czego:
agregat$datak.max <- as.Date(agregat$datak.max, origin="1970-01-01")


To wtedy, gdyby wynik wyszedł taki:
> agregat
CLIENT datak.max datak.length
1 Abacki 12113 3
2 Bebacki 10631 1
3 Cedacki 13850 4
4 Decacki 10927 1
5 Dedacki 11232 1
6 Edacki 12881 8
7 Fedacki 14354 2
8 Gedacki 14619 4


po poprawce
   CLIENT  datak.max datak.length
1 Abacki 2003-03-02 3
2 Bebacki 1999-02-09 1
3 Cedacki 2007-12-03 4
4 Decacki 1999-12-02 1
5 Dedacki 2000-10-02 1
6 Edacki 2005-04-08 8
7 Fedacki 2009-04-20 2
8 Gedacki 2010-01-10 4
Adrian Olszewski edytował(a) ten post dnia 29.03.10 o godzinie 15:08
Wojciech Sobala

Wojciech Sobala Redaktor
statystyczny,
biostatystyk,
Instytut Medycyny
Pr...

Temat: Z cyklu "pytania banalne" - agregacja :)

Gdyby jednak daty były jako tekst to:
dane$datak = as.Date(dane$datak,format="%d-%m-%Y")

Chociaż bardziej prawdopodobne, że będzie to factor (jeżeli nie data) i wtedy:
dane$datak = as.Date(levels(dane$datak)[dane$datak],format="%d-%m-%Y")
Izabela R.

Izabela R. Analityk danych

Temat: Z cyklu "pytania banalne" - agregacja :)

Wow, wielkie dzięki! :)

Następna dyskusja:

Z cyklu "pytania banalne" -...




Wyślij zaproszenie do