2

特に、すべての国と年の 1 つの列の最大値を定義する方法を見つけようとして、時系列の横断的データセットでしばらく苦労しています。for ループと if/else ループのさまざまなバージョンを試しましたが、うまくいきませんでした。手がかりがあれば教えていただけないでしょうか。

これは、私のデータ構造の再現可能な小さな例です。

country <- c("a","a","a","a","a","a","b","b","b","b","b","b","c","c","c","c","c","c")
year <- c(2002, 2003, 2004, 2005, 2006, 2007, 2002, 2003, 2004, 2005, 2006, 2007, 2002, 2003, 2004, 2005, 2006, 2007)
topic <-c("u", "v", "w", "x","y","z","u", "v", "w", "x","y","z","u", "v", "w", "x","y","z")
perc <-c(0.3,0.4,0.1,0.2,0,0,0.2,0.3,0.1,0.1,0.1,0.2,0.1,0.2,0.2,0.3,0, 0.2)
dta <- data.frame(country, year, topic, perc)

最後に、特定の年と国で最も割合が高いトピックを示す新しい変数を作成したいと思います。

topicmax <-c("v","v","v","v","v","v","v","v","v","v","v","v","x","x","x","x","x","x")

できれば、perc-value が最も高いトピックの正確なパーセンテージを指定する別の変数も生成することをお勧めします。

どんな助けでも大歓迎です。私が見つけたループに関するすべてのチュートリアルは、時系列の横断的な問題に取り組んでいません...ありがとう!

4

1 に答える 1

2

この問題にアプローチする 1 つの方法は、 を使用することですwhich.max。最大値のインデックス位置を特定します。そのインデックスを使用してサブセット化できますtopic

library(data.table)
setDT(dta)[, topicmax := topic[which.max(perc)], by=country]
#     country year topic perc topicmax
#  1:       a 2002     u  0.3        v
#  2:       a 2003     v  0.4        v
#  3:       a 2004     w  0.1        v
#  4:       a 2005     x  0.2        v
#  5:       a 2006     y  0.0        v
#  6:       a 2007     z  0.0        v
#  7:       b 2002     u  0.2        v
#  8:       b 2003     v  0.3        v
#  9:       b 2004     w  0.1        v
# 10:       b 2005     x  0.1        v
# 11:       b 2006     y  0.1        v
# 12:       b 2007     z  0.2        v
# 13:       c 2002     u  0.1        x
# 14:       c 2003     v  0.2        x
# 15:       c 2004     w  0.2        x
# 16:       c 2005     x  0.3        x
# 17:       c 2006     y  0.0        x
# 18:       c 2007     z  0.2        x
于 2015-11-30T21:22:01.337 に答える