2013-11-09 64 views
0

我有一個數據框,其中列年|國家|增長率。我想比較每個國家的增長率和我選擇的其他國家的增長率,並篩選特定年份增長率較高的國家。比較數據框中的值和過濾

所以,我認爲第一步是把所有國家的增長率和我選擇的國家之間的差異,我設法遠遠地得到這樣的:

difference <- ddply(data, .(year), transform, 
     x=growth_rate - 4) 

這會給我第一個數據幀我想,只有硬編碼的4應該是所選國家(比如說加拿大)在相應年份的增長率。我試過類似的東西:

difference <- ddply(data, .(year), transform, 
      x=growth_rate - data[country=="Canada",]$growth_rate) 

但這是不正確的。

一旦我得到這個正確的,下一步將過濾僅x> 0的那些行。

任何幫助將不勝感激。

這是我的數據幀是什麼樣子:

> head(data) 
    iso2c country  growth_rate year 
1 1A Arab World   3.911548 2012 
2 1A Arab World   5.282387 2011 
3 1A Arab World   4.648676 2010 
4 1A Arab World   2.253365 2009 
5 1A Arab World   6.509886 2008 
6 1A Arab World   5.634384 2007 

回答

1

如果我明白你的問題的權利 -

library(data.table) 

# some random data 
dt <- data.table(
    year = c(rep(2013,4),rep(2012,4),rep(2011,4)), 
    country = rep(c('A','B','C','D'),3), 
    growth_rate = runif(12,0,10) 
) 

# country to compare 
countrycompared <- 'B' 

# creating the new dataset where growth rate is higher that country to compare in that year 
dt2 <- dt[, 
      ToKeep := growth_rate > .SD[country == countrycompared,growth_rate 
             ], 
      by = year][ToKeep == TRUE] 

這是dt樣子 -

> dt 
    year country growth_rate 
1: 2013  A 3.175187 
2: 2013  B 3.693736 
3: 2013  C 4.080300 
4: 2013  D 9.692282 
5: 2012  A 7.212747 
6: 2012  B 8.343452 
7: 2012  C 6.606016 
8: 2012  D 8.516030 
9: 2011  A 6.361843 
10: 2011  B 8.318292 
11: 2011  C 4.682559 
12: 2011  D 2.081757 

而且dt2 -

> dt2 
    year country growth_rate ToKeep 
1: 2012  A 4.038502 TRUE 
2: 2012  D 8.113058 TRUE 
+0

謝謝,我不熟悉data.table庫。當我在我的數據上試試這個時,我得到以下錯誤:'[.data.frame'(data,,':='(ToKeep,growth_rate> .SD [country ==: unused argument(by = year) – user1754606

+0

對不起,這個評論功能很糟糕,我有一個名爲year的列,我在我的問題中加入了這個列 – user1754606

+0

您需要先安裝'data.table'包,然後才能使用此代碼,將dt聲明爲data.frame將阻止代碼工作,因爲它使用data.table的特定功能 – TheComeOnMan