2016-01-14 71 views
0

值條件的總和變量值我有一個數據幀,看起來像這樣:R:在其他變量

year country inhabitants 
1 1  A   15 
2 2  A   10 
3 3  A   24 
4 1  B   76 
5 2  B   69 
6 3  B   58 
7 1  C   120 
8 2  C   131 
9 3  C   128 

現在,我想創建「居民」的總和,每年爲,在所有國家。 即,我的解決辦法是這樣的:

year country inhabitants sum_inhabitants 
1 1  A   15    211 
2 2  A   10    210 
3 3  A   21    207 
4 1  B   76    211 
5 2  B   69    210 
6 3  B   58    207 
7 1  C   120    211 
8 2  C   131    210 
9 3  C   128    207 

我的原始數據幀中包含更多的意見,這就是爲什麼我不能做手工計算。

+0

這將是巨大的,如果你能提供一個最小的重複的例子,你的問題一起去。我們可以從中學習並使用它來向您展示如何回答您的問題。這樣,其他人也可以在將來形成你的問題和相應的答案。你可以看看[這個SO帖子](https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)關於如何在R中創建一個很好的重現例子另外,請概述你已經嘗試過的東西。 –

+0

@EricFail尋找一個不同的投資沒有累積款項 –

回答

0

我們可以使用ave來逐年累計,不需要外部包裹。它擁有超過aggregate的優點是它不會總結,而是填寫在線:

df$sum_inhabitants <- ave(df$inhabitants, df$year, FUN=sum) 
# year country inhabitants sum_inhabitants 
# 1 1  A   15    211 
# 2 2  A   10    210 
# 3 3  A   21    207 
# 4 1  B   76    211 
# 5 2  B   69    210 
# 6 3  B   58    207 
# 7 1  C   120    211 
# 8 2  C   131    210 
# 9 3  C   128    207 
+0

完美,非常感謝!有沒有辦法忽略「居民」中的新來港定居人士? – Theresa

+0

是的。 'ave(df $居民,df $ year,FUN =函數(x)sum(x,na.rm = T))' –

0

使用dplyr包,你可以做這樣的事情:

library(dplyr) 
df %>% group_by(year) %>% summarise(sum_inhabitants = sum(inhabitants)) 

如果你真的想保留該列中的重複項並將其添加到原始數據框中,將summarise更改爲mutate,這將爲您提供上面指定的確切輸出。

如果你想按年份和按國家得到它,你可以這樣做:

df %>% group_by(year, country) %>% summarise(sum_inhabitants = sum(inhabitants))