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
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 に答える