2013-09-26 3 views
-1

Я пытаюсь получить это право, но я не могу найти правильный способ укрепить эту проблему. Допустим, у меня есть некоторые данные, которые выглядят следующим образом:Значения сумм по критерию по r

hhid totalplacevisited 
1    5 
1    6 
1    2 
2    2 
2    4 
3    1 

Как я могу объединить данные, так что я могу получить значения в этом формате:

hhid totalplacevisited totalplacedvisitedbyhh 
1    5     13 
1    6     13 
1    2     13 
2    2     6 
2    4     6 
3    1     1 
+0

«Как я могу объединить» - подходяще, используя 'aggregate'. –

ответ

1

Одна альтернатива использует ave

> transform(df, totalplacedvisitedbyhh = with(df,ave(totalplacevisited, hhid, FUN=sum))) 
    hhid totalplacevisited totalplacedvisitedbyhh 
1 1     5      13 
2 1     6      13 
3 1     2      13 
4 2     2      6 
5 2     4      6 
6 3     1      1 

Другая альтернатива использует data.table

> library(data.table) 
> DT <- data.table(df) 
> DT[, totalplacedvisitedbyhh := sum(totalplacevisited), by=hhid] 
> DT 
    hhid totalplacevisited totalplacedvisitedbyhh 
1: 1     5      13 
2: 1     6      13 
3: 1     2      13 
4: 2     2      6 
5: 2     4      6 
6: 3     1      1 
+1

Спасибо, что ave() отлично поработал –

1

Пакет data.table это самый быстрый способ:

dt = data.table(df) 
dt[,totalplacesvisitedbyhh:=sum(totalplacevisited),by=hhid] 
0

Вот решение от plyr пакета

library(plyr) 
ddply(mydf,.(hhid),transform, totalplacedvisitedbyhh=sum(totalplacevisited)) 

hhid totalplacevisited totalplacedvisitedbyhh 
1 1     5      13 
2 1     6      13 
3 1     2      13 
4 2     2      6 
5 2     4      6 
6 3     1      1 
Смежные вопросы