このたびはお世話になります。
次のようなデータフレームがあります。
R
1 2study <- data.frame( 3 Employee_ID = c(101:110), 4 出身 = c("北海道","北海道", "東京", "大阪", "秋田", 5 "秋田", "東京", "大阪","北海道", "東京"), 6 性別= c(rep("男性",3), "女性", "男性", rep("女性", 2), 7 "男性","女性", "男性"), 8 好きな色 = c(rep("赤",2), rep("青",3), rep("黄",2), rep("緑",3)), 9 所属 = c("総務課", "経理課", "人事部", "経理課","総務課", 10 "経理課", "人事部", "経理課", "人事部", "経理課"), 11 異動= c(rep("YES",2), rep("NO",6), rep("YES",2)) 12)
これを、列ごとにそれぞれ異なる対応表を参照し、次のように数値に変換したく思います。
Employee_ID | 出身 | 性別 | 好きな色 | 所属 | 異動 |
---|---|---|---|---|---|
101 | 1 | 0 | 1 | ||
102 | 1 | 0 | 1 | ||
103 | 3 | 0 | 2 | ||
104 | 4 | 1 | 2 | ||
105 | 2 | 0 | 3 | ||
106 | 2 | 1 | 3 | ||
107 | 3 | 1 | 3 | ||
108 | 4 | 0 | 4 | ||
109 | 1 | 1 | 4 | ||
110 | 3 | 0 | 4 |
変換に用いる対応表は次の通りで、データフレームの列番号に準拠した命名としています。
(v2 を、2列目(=出身)の変換に用いる)
R
1v2 <- data.frame( 2 出身 = c("北海道", "秋田", "東京", "大阪"), 3 code = c(1, 2, 3, 4) ) 4 5v3 <- data.frame( 6 性別 = c("男性", "女性"), 7 code = c(0, 1) ) 8 9v4 <- data.frame( 10 好きな色 = c("赤", "青", "黄", "緑"), 11 code = c(1,2,3,4) ) 12 13v5 <- data.frame( 14 所属 = c("経理課", "総務課", "人事部"), 15 code = c(1, 2, 3) ) 16 17V6 <- data.frame( 18 異動 = c("YES", "NO"), 19 code = c(1, 0) )
次のように、1列ずつは変換することができました。
しかし、実際のデータは列数が100列以上あります。
ループを使って処理したいのですが、V2, V3 ...と変数名も変化していくため、どうしても処理できません。すみませんが、お教えいただけましたら幸いです。
R
1pre <- study %>% select(2) 2post <-lapply(pre, function(x){ 3 as.vector(v2[[2]][match(x, v2[[1]])]) 4}) 5 6c <- data.frame( post) 7

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/02/03 00:43