2
data.tableを使用していくつかの変数をいくつかのグループ変数で標準化できますか?data.tableを使用してグループごとに標準化する
DT <- data.table(V1=1:20, V2=40:21, gr=c(rep(c('a'),10), rep(c('b'),10)),
grr=rep(c(rep(c('a'),5), rep(c('b'),5)),2))
grとgrrはグループ変数です。それぞれのgr-by-grrグループ内の標準化されたスコアであるdata.table V1.zとV2.zを追加したいと思います。ここで
は私が欲しいものを説明するために、そのための非常に愚かなコードです:
DTaa <- DT[gr=='a' & grr=='a',]
DTab <- DT[gr=='a' & grr=='b',]
DTba <- DT[gr=='b' & grr=='a',]
DTbb <- DT[gr=='b' & grr=='b',]
DTaa <- DTaa[,V1.z := scale(V1)]
DTaa <- DTaa[,V2.z := scale(V2)]
DTab <- DTab[,V1.z := scale(V1)]
DTab <- DTab[,V2.z := scale(V2)]
DTba <- DTba[,V1.z := scale(V1)]
DTba <- DTba[,V2.z := scale(V2)]
DTbb <- DTbb[,V1.z := scale(V1)]
DTbb <- DTbb[,V2.z := scale(V2)]
DTn <- rbind(DTaa, DTab, DTba, DTbb)
おそらく、1でby
または2行を使用してそれを実行する方法があります。
- 私は、データ、ターゲット変数(例ではV1とV2)、グループ変数(例ではgrとgrr)を引数として受け入れる関数で使用したいと考えています。
- data.tableを使用しないソリューションをお持ちの場合は、それも良いです(私はdplyrのmutate_atを使用しようとしましたが、その関数に関する多くのドキュメントは見つかりませんでした)。
@YBAあなたにはうってつけの喜び。また、ガイドライン[here](http://stackoverflow.com/help/someone-answers) – akrun
をお読みください。ありがとう。 フォローアップの質問: 私はV3とV4をdata.tableに追加しましたが、あなたのコードはまだ最初の2つの変数だけを変換することを知っていました。それはいいですが、どうしましたか?つまり、data.tableは、第1列と第2列だけでアクションを実行することをどのようにしたいのですか?私がここに見ているのはpaste0ですが、それは新しい変数の名前だけです。列1と列2の名前を使用し、列3と列4のアクションを実行する場合はどうしたらいいですか? – YBA
@YBA一般に、 '.SD'は' by'カラムで指定されていないすべてのカラム、すなわち '(gr、grr)'を含みます。他の列があり、 'V1'と 'V2'だけを行い、 '.SDcols'でそれらを指定すると' .SDcols = V1:V2'とし、 '.SD'をループします。ポスト。 – akrun