将相同的因子水平应用于R数据帧中的多个变量

时间:2013-03-18 18:31:40

标签: r

我正在使用包含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")

2 个答案:

答案 0 :(得分:20)

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

可能要快于应用或者需要data.frame来改革/重新分类这些结果。这里的诀窍是在赋值的LHS上使用[]保留了目标的结构(因为R“知道”它的类和维度是什么,以及data.frame在列表上的需要{不需要{1}}。如果您只想使用选定的列执行此操作,则可以执行此操作:

lapply

答案 1 :(得分:1)

使用apply

的R基础解决方案
 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")))