0

我有一个包含 year|country|growth_rate 列的数据框。我想将每个国家/地区的增长率与我选择的其他国家/地区进行比较,并筛选出在给定年份增长率较高的国家/地区。

所以我认为第一步是在所有国家的增长率和我选择的国家之间进行比较,我设法做到了这一点:

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
4

1 回答 1

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
于 2013-11-09T17:44:15.210 回答