13

応答セットが同一(はい、いいえ、不明、または欠落)である16の質問を含むデータセットを使用しています。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")
4

2 に答える 2

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

これらの結果を再編成/再分類するためにdata.frameを必要とするapplyまたはsapplyよりも高速である可能性があります。ここでの秘訣[]は、割り当てのLHSで使用すると、ターゲットの構造が保持されることです(Rはそのクラスとディメンションが何であるかを「認識」してdata.frameおり、リストに追加するlapply必要がないためです。これを実行したい場合は、選択した列でのみ、これを行うことができます。

 df[colnums] <- lapply(df[colnums], factor, 
              levels=c(-9, 0, 1), 
              labels = c("Unknown or Missing", "No", "Yes"))
 str(df)
于 2013-03-18T18:47:33.567 に答える
1

を使用したRベースソリューションapply

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

使用するsapply

data.frame(sapply(df, factor, levels=c(-9, 0, 1), 
         labels = c("Unknown or Missing", "No", "Yes")))
于 2013-03-18T18:43:05.157 に答える