2017-12-13 31 views
0

dfの複数の列を変更し、各再構成された変数に対して新しい列を生成する関数を作成しようとしています。この場合、私が実行している突然変異は、15の列の各要素を減算することです。次の3つの列のコードを書くことができましたが、将来は20 +列以上のものを実行したいあなたが突然変異しているように、それぞれの新しい列名を書くことは面倒なようです。どんな助けでも大歓迎です。私は、新しい列を生成するために関数を変更するか、関数を突然変更する必要がありません。複数の列を再作成してdfの新しい列を作成する

DF2 < - 変異させる(DF1、new_col1 = 15-old_col1、 new_col2 = 15 - old_col2、new_col3 = 15 - old_col3)

+0

あなたはそのためmutate_allを()を使用することができますたとえば、列のみ2と3であなたの突然変異を実行します。 – sb0709

答えて

0

data.tableソリューション、あなたは*(参照列の全てを変異させたいと仮定より柔軟なバージョンについては以下を参照してください)。

* as @ sb0709コメントには、mutate_allも同様です。与え

library(data.table) 
df <- data.table(old_col_1 = 20:24, 
        old_col_2 = 55:49, 
       old_col_3 = rnorm(5, 100, 30)) 

df[ , sub("old", "new", names(df)) := lapply(.SD, function(x) 15-x) ] 

R> df 
    old_col_1 old_col_2 old_col_3 new_col_1 new_col_2 new_col_3 
1:  20  55 86.29104  -5  -40 -71.29104 
2:  21  56 144.21564  -6  -41 -129.21564 
3:  22  57 104.84574  -7  -42 -89.84574 
4:  23  58 93.18084  -8  -43 -78.18084 
5:  24  59 104.96188  -9  -44 -89.96188 

あなたはすべての列よりも少ないを選択したい場合は、あなただけのnamesベクトルと.SDリストをサブセットにする必要があります。

df[ , sub("old", "new", names(df)[2:3]) := lapply(.SD[,2:3], function(x) 15-x) ] 

代わりになります::

R> df 
    old_col_1 old_col_2 old_col_3 new_col_2 new_col_3 
1:  20  55 138.28667  -40 -123.28667 
2:  21  56 69.03836  -41 -54.03836 
3:  22  57 147.39790  -42 -132.39790 
4:  23  58 88.15505  -43 -73.15505 
5:  24  59 28.96437  -44 -13.96437 
関連する問題