比较数据框中的值和过滤

时间:2013-11-09 17:18:21

标签: r dataframe plyr data-manipulation

我有一个包含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

1 个答案:

答案 0 :(得分: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