【发布时间】:2013-10-24 23:05:59
【问题描述】:
清理包含需要折叠的多个级别的因素的最有效(即有效/适当)方法是什么?即如何将两个或多个因子水平合二为一。
这是一个示例,其中“是”和“Y”两个级别应折叠为“是”,“否”和“N”应折叠为“否”:
## Given:
x <- c("Y", "Y", "Yes", "N", "No", "H") # The 'H' should be treated as NA
## expectedOutput
[1] Yes Yes Yes No No <NA>
Levels: Yes No # <~~ NOTICE ONLY **TWO** LEVELS
一种选择当然是使用sub 和朋友事先清理字符串。
另一种方法,是允许重复标签,然后删除它们
## Duplicate levels ==> "Warning: deprecated"
x.f <- factor(x, levels=c("Y", "Yes", "No", "N"), labels=c("Yes", "Yes", "No", "No"))
## the above line can be wrapped in either of the next two lines
factor(x.f)
droplevels(x.f)
但是,有没有更有效的方法?
虽然我知道 levels 和 labels 参数应该是向量,但我尝试了列表、命名列表和命名向量,看看会发生什么
不用说,以下这些都没有让我更接近我的目标。
factor(x, levels=list(c("Yes", "Y"), c("No", "N")), labels=c("Yes", "No"))
factor(x, levels=c("Yes", "No"), labels=list(c("Yes", "Y"), c("No", "N")))
factor(x, levels=c("Y", "Yes", "No", "N"), labels=c(Y="Yes", Yes="Yes", No="No", N="No"))
factor(x, levels=c("Y", "Yes", "No", "N"), labels=c(Yes="Y", Yes="Yes", No="No", No="N"))
factor(x, levels=c("Yes", "No"), labels=c(Y="Yes", Yes="Yes", No="No", N="No"))
【问题讨论】:
-
尚未对此进行测试,但 R 3.5.0 (2018-04-23) 发行说明说“因子(x,级别,标签)现在允许重复标签(而不是重复级别!) . 因此,您可以将 x 的不同值直接映射到同一级别。”