Wydaje się, że taki prosty problem, ale byłem ciągnąc moje włosy starając się uzyskać to do pracy:Kruszywo (liczba) wiersze spełniające warunek, grupa o unikalnych wartościach
Biorąc pod uwagę to rama dane identyfikujące interakcje id
mieli z contact
którzy są pogrupowane według contactGrp
,
head(data)
id sesTs contact contactGrp relpos maxpos
1 6849 2012-06-25 15:58:34 peter west 0.000000 3
2 6849 2012-06-25 18:24:49 sarah south 0.500000 3
3 6849 2012-06-27 00:13:30 sarah south 1.000000 3
4 1235 2012-06-29 17:49:35 peter west 0.000000 2
5 1235 2012-06-29 23:56:35 peter west 1.000000 2
6 5893 2012-06-30 22:21:33 carl east 0.000000 1
jak wiele kontaktów, gdzie tam unique(data$contactGrp)
z relpos=1
i maxpos>1
?
Oczekiwany wynik byłby:
1 west 1
2 south 1
3 east 0
niewielki podzbiór wierszy Próbowałem:
aggregate(data, by=list('contactGrp'), FUN=count)
daje błąd, bez filtrowania- użyciu
data.table
wydaje się wymagać klucza, który nie jest unikalny w tych danych ... ddply(data,"contactGrp",summarise,count=???)
nie wiesz, której funkcji użyć, aby wypełnićcount
kolumnaddply(subset(data,maxpos>1 & relpos==0), c('contactGrp'), function(df)count(df$relpos))
działa, ale daje mi dodatkową kolumnęx
i czuje się jakbym to nadmiernie skomplikowane ...
SQL byłoby proste: Select contactGrp, count(*) as cnt from data where … Group by contactGrp
ale im próbuje dowiedzieć R
Myślę, że chodziło o 'zachód 2, wschód 0, południe 0' o oczekiwane rezultaty. – joran
faktycznie relpos = 1. Ale tak dla relpos = 0 oczekiwany wynik jest błędny ... –
Gah! Masz rację, przepraszam. Jest wcześnie rano, gdzie jestem. :) – joran