2017-08-10 8 views
0

ルックアップテーブルを使用して、Rのデータフレーム内の変数のクラスを割り当てる/変更することはできますか?私は、1つのデータフレーム(my_df)に混乱したクラスを持つ何千もの列を持ち、別のデータフレーム(my_lt)にあるべきもののリストを持っています。 PSEUDO CODE私は、my_lt $ variable_nameとgrep()をcolnames(my_df)で使用して、$ variable_class == "numeric"ならばas.numericを通して出力を渡すようなものを考えていました。どんな助けでも大歓迎です!複数の列を選択し、Rのルックアップテーブルを使用してそのクラスを変更しますか?

入力 - 私のデータフレーム(my_df)

my_df = data.frame(q1_hight_1=c(12,31,22,12),q1_hight_2=c(24,54,23,32),q1_hight_3=c(34,23,65,34),q2_shoe_size_1=c(2,2,3,4),q2_shoe_size_2=c(4,3,3,4)) 

入力 - 私のルックアップテーブル(my_lt)

my_lt = data.frame(variable_name=c("hight","shoe_size"),variable_class=c("numeric","integer")) 

所望の出力(クラスをチェックする)

$q1_hight_1 [1] "numeric" $q1_hight_2 [1] "numeric" $q1_hight_3 [1] "numeric" $q2_shoe_size_1 [1] "integer" $q2_shoe_size_2 [1] "integer" 
+0

おそらく 'mapply'とswitch文を使用できます。 –

答えて

0

これはありませんあなたがあなたの変数に与える名前にトラップがないことを考えると(私は非常に純粋なgrepを使用しています)、トリックです。

library(dplyr) 
library(purr) 
map2(as.character(my_lt$variable_name), 
    as.character(my_lt$variable_class), 
    function(nam,cl){ map(grep(nam,names(my_df)),function(i){class(my_df[[i]]) <<- cl})}) 

str(my_df) 
# 'data.frame': 4 obs. of 5 variables: 
# $ q1_hight_1 : num 12 31 22 12 
# $ q1_hight_2 : num 24 54 23 32 
# $ q1_hight_3 : num 34 23 65 34 
# $ q2_shoe_size_1: int 2 2 3 4 
# $ q2_shoe_size_2: int 4 3 3 4 
関連する問題