2017-05-17 8 views
1

時にはうまく動作しないことがあるRスクリプトがあります。問題を、2つのデータセットをマージする前に、文字 - >ファクタ変換に関連するものであると特定しました。文字変数をファクタに変更する

私は、data1に '1'、 '2'、 '3'などのようにコード化された件名のリストを持っており、data2では '01'、 '02'、 '03' data2に一致するようにdata1の参加者番号を再コード化します。最初にdata1 $ subjを係数に変換し、forcatsでfct_recodeを使ってデータを再コードしようとします。次の2つのオプションのどちらも動作します:

library(forcats) 
data1$subj <- as.factor(data1$subj) 

data1 <- data1 %>% 
    mutate(subj = fct_recode(subj, 
          "01" = "1", 
          "02" = "2", 
          "03" = "3")) 

または

data1 <- data1 %>% 
    mutate(subj = factor(subj), 
    subj = fct_recode(subj, 
         "01" = "1", 
         "02" = "2", 
         "03" = "3")) 

私は首題を確認するために戻ってDATA1に行く、それは全体の文字変数として残っており、そのデータは再コーディングしません。

私が上で述べたように、時にはうまくいくこともありますが、時にはそうではありません!私は明らかに私のコードでいくつかのニュアンスを見逃してしまった。どんなアドバイスもありがとう!

+0

、あなたはレベル 'のようなベースRの直接割り当て(DATA1ます$ SUBJ)を使用することができます。< - 1:それらが適切に注文されていると仮定して「3」とする。代わりに(先頭の0を取り除く) 'levels(temp)< - gsub("^0 "、"、levels(temp)) 'があります。 2つ目は順序を尊重し、おそらくより安全です。 – lmo

答えて

0

私はライブラリに慣れていませんforcats。しかし、私は

levels(data1$subj)[levels(data1$subj)=="01"] <- "1" 
[etc.] 

ORをしようとするだろう:あなたが唯一の科目1,2,3を持っている場合は

library(plyr) 
revalue(data1$subj , c("01"="1", "02"="2","03"="3")) 
+0

ありがとう、これは動作します! –

+0

うれしいです。あなたは常に最高の答えとして上記を選択することができます:) – amonk

関連する問題