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