2013-03-18 15 views
11

私は、応答セットが同一の16個の質問(Yes、No、UnknownまたはMissing)を含むデータセットを扱っています。私はRを使ってデータを処理しています。それぞれの変数を因子に変えたいと思います。 1つの変数については、次の構文を使用できます。Rデータフレーム内の複数の変数に同じ因子レベルを適用する

df <- read.csv("thedata.csv") 
df$q1 <- factor(x=df$q1,levels=c(-9,0,1), 
         labels=c("Unknown or Missing","No","Yes)) 

16回入力しないでください。私はfor()でそれを行うことができましたが、それを行うためのより明確な、より多くのR方法があるかどうか疑問に思っていました。いくつかのサンプルデータ:

structure(list(q1 = c(0, 0, 0, -9, 0), q2 = c(0, 0, 1, 0, 0), 
       q3 = c(0, 0, 1, 0, 0), q4 = c(1, 1, 0, 0, 0), 
       q5 = c(0, 1, 1, 1, 1), q6 = c(1, 1, 1, 0, 0), 
       q7 = c(0, 0, 0, 1, 0), q8 = c(0, 0, 1, 1, 1), 
       q9 = c(1, 0, -9, 1, 0), q10 = c(1, 0, 0, 0, 0), 
       q11 = c(0, 1, 1, 0, 0), q12 = c(1, 1, 0, 0, 0), 
       q13 = c(1, -9, 1, 0, 0), q14 = c(0, 0, 0, 1, 1), 
       q15 = c(1, 0, 1, 1, 0), q16 = c(1, 1, 1, 1, 1)), 
       .Names = c("q1", "q2", "q3", "q4", "q5", "q6", "q7", 
          "q8", "q9", "q10", "q11", "q12", "q13", 
          "q14", "q15", "q16"), 
       row.names = c(NA, -5L), class = "data.frame") 

答えて

18
df[] <- lapply(df, factor, 
       levels=c(-9, 0, 1), 
       labels = c("Unknown or Missing", "No", "Yes")) 
str(df) 

はおそらく使用apply

data.frame(apply(df, 2, factor, 
       levels=c(-9, 0, 1), 
       labels = c("Unknown or Missing", "No", "Yes"))) 

を用いR塩基溶液それらの結果を改革/再分類する。ここでのトリックは、割り当てのLHSに[]を使用すると、ターゲットの構造が保持されます(Rはそのクラスと次元が何であるかを知っているため、data.frameのリストの必要性は不要です)。選択した列でのみこれを行うには、次のようにします。

df[colnums] <- lapply(df[colnums], factor, 
       levels=c(-9, 0, 1), 
       labels = c("Unknown or Missing", "No", "Yes")) 
str(df) 
1

にdata.frameを必要がある適用またはsapplyよりも速くなるようにsapply

data.frame(sapply(df, factor, levels=c(-9, 0, 1), 
     labels = c("Unknown or Missing", "No", "Yes"))) 
+0

注意:applyは常に入力を行列に変換します – hadley

関連する問題