如何一次订购因子水平而不是单独订购

时间:2017-08-09 20:13:58

标签: r factors

我正在对一项调查进行分析,大多数问题(167个中的105个问题)的排名在1到10之间,而99999则没有填写。我将数据集加载到R中并用这105个问题制作了一个数据框。当我这样做时,我看到数据类型不正确。他们都是dbl。所以我首先用(数据集=调查)改变了数据类型:

survey <-data.frame(lapply(survey, as.character), stringsAsFactors=FALSE)
survey[survey == 99999] <- "No answer"

能够将99999更改为“无应答”然后我使用:

survey[] <- lapply(survey,factor)

将其更改为因子。但现在的问题是,在我将更改应用于char后,因子或等级的顺序立即发生了变化。我认为这样做的原因是,对于某些问题,没有人排名为1,当你将其更改为char时,它会将rank = 10置于第一个位置,例如:

survey %>% group_by(v2_a)%>% summarize(count = n())

我知道一种单独重新排序等级的方法,例如:

survey$v2_a <- factor(survey$v2_a, levels = c("1","2", "3", "4","5","6","7","8","9","10","No answer"))
survey$v2_b <- factor(survey$v2_b, levels = c("1","2", "3", "4","5","6","7","8","9","10","No answer"))
survey$v2_c <- factor(survey$v2_c, levels = c("1","2", "3", "4","5","6","7","8","9","10","No answer"))
...

但如果你必须为105个不同的问题做这件事,那么这需要很多工作。有人知道更短的方式吗?我试过像:

survey <- factor(survey, levels = c("1","2", "3", "4","5","6","7","8","9","10","No answer"))

但这肯定不起作用。

1 个答案:

答案 0 :(得分:2)

提供给lapply的任何其他参数都将添加到函数参数中,所以像这样

survey[] <- lapply(survey,factor,levels=c(1:10,"no answer"))

可能会奏效。

如果你想更明确一点,你可以这样做:

ffun <- function(x) return(factor(x,levels=c(1:10,"no answer")))
survey[] <- lapply(survey,ffun)

您还可以尝试使用na.strings="9999"(或其他)首先阅读您的数据,以便您的无应答案例自动转换为NA

相关问题