我想将R中的字符向量转换为一个因子(让我们以DataCamp入门到R课程中的例子为例),并对其中的几个因素进行标记。如何避免,任何未提及的/未声明的级别都会自动放到NA中?
speed_vector <- c("fast", "slow", "slow", "fast", "insane")
factor_speed_vector <- factor(speed_vector, ordered = TRUE, levels = c("slow", "insane"), labels = c("Speed < 30 mph", "Speed > 100 mph"))
结果:
> summary(factor_speed_vector)
Speed < 30 mph Speed > 100 mph NA's
2 1 2
> factor_speed_vector
[1] <NA> Speed < 30 mph Speed < 30 mph <NA> Speed > 100 mph
Levels: Speed < 30 mph < Speed > 100 mph
如何确保任何未定义的因素级别(如本例中的"fast“)与原始值结转,而不是设置为NA?
编辑:我以前在这里的评论,是因为因子函数中的级别和标签选项混淆了。任何人,也不知道有什么不同,都可以在这里读到:Confusion between factor levels and factor labels
发布于 2017-08-30 07:22:47
使用levels
和match
,您可以执行以下操作。
从一个因子变量开始:
factor_speed_vector <- factor(c("fast", "slow", "slow", "fast", "insane"), ordered = TRUE)
然后,用match
改变变量的级别,提取适当的指标。
levels(factor_speed_vector)[match(c("slow", "insane"), levels(factor_speed_vector))] <-
c("Speed < 30 mph", "Speed > 100 mph")
在这里,match(c("slow", "insane"), levels(factor_speed_vector))
发现与“缓慢”和“疯狂”匹配的因子水平的指数。这些索引用于对级别进行子集,然后输入新的标签。
发布于 2017-08-30 07:27:53
forcats
包有一些很好的帮助函数来处理各种因素。fct_recode()
函数允许手动更改因子级别。您可以指定一个命名字符向量序列,其中名称给出新级别,值给旧级别。否则未提及的级别将保持原样。(来自?fct_recode
,重点是我)。
speed_vector <- c("fast", "slow", "slow", "fast", "insane")
speed_vector
1“快”“慢”“慢”“快”“疯”
forcats::fct_recode(speed_vector, "Speed < 30 mph" = "slow", "Speed > 100 mph" = "insane")
1快速速度< 30英里/小时速度< 30英里/小时速度> 100英里/小时级:快速速度> 100英里/小时速度< 30英里/小时
发布于 2017-08-30 07:20:41
这个适合你吗?
speed_vector <- c("fast", "slow", "slow", "fast", "insane")
factor_speed_vector <- factor(speed_vector)
levels(factor_speed_vector)[factor_speed_vector == "slow"] <- "Speed < 30 mph"
levels(factor_speed_vector)[factor_speed_vector == "insane"] <- "Speed > 100 mph"
factor_speed_vector
# [1] fast Speed < 30 mph Speed < 30 mph fast Speed > 100 mph
# Levels: fast Speed > 100 mph Speed < 30 mph
https://stackoverflow.com/questions/45963527
复制