gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 00:38:57 24 4
gpt4 key购买 nike

我正在处理一个包含 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")

最佳答案

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

可能比 apply 或 sapply 更快,后者需要 data.frame 来改造/重新分类这些结果。这里的诀窍是使用 []在赋值的 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)

关于r - 将相同的因子水平应用于 R 数据框中的多个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15484236/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com