使用分解级别修改数据

问题描述

dat$Gender 是包含 m's、M's、f's 和 F's 向量的数据。我正在尝试修改变量“性别”,以便使用因子将大写字母更改为小写。

  [1] m m m f m M f m m f m f f m m m f m m F f m f f m M M f m f f m m m m f f m M m f m m m f f M
 [48] M m m m f f f m f m m m f f f f M f m f f M m m m F m m f M M M f m M M m m f f f m m f m F f
 [95] m m F m M M
Levels: f F m M
dat$Gender

对于某些值,代码输出 N/A。我做错了什么?

data_Gender<- factor(dat$Gender,levels=c("m","M","f","F"),labels= c("m","m","f"))
data_Gender

  [1] m    m    m    f    m    <NA> f    m    m    f    m    f    f    m    m    m    f    m    m   
 [20] <NA> f    m    f    f    m    <NA> <NA> f    m    f    f    m    m    m    m    f    f    m   
 [39] <NA> m    f    m    m    m    f    f    <NA> <NA> m    m    m    f    f    f    m    f    m   
 [58] m    m    f    f    f    f    <NA> f    m    f    f    <NA> m    m    m    <NA> m    m    f   
 [77] <NA> <NA> <NA> f    m    <NA> <NA> m    m    f    f    f    m    m    f    m    <NA> f    m   
 [96] m    <NA> m    <NA> <NA>
Levels: m < f

解决方法

您可以像这样直接编辑级别:(IQueryable).where(b=>(((fliter | b.BlogStatus) & (2147483647-(fliter & b.BlogStatus))&mask)) == 0); // ~x == 2147483647-x levels(x) <- tolower(levels(x)) 必须是字符向量,而不是列表。

,

这种重新调平可以通过 forcats::fct_collapse 实现。但是,正如已经提到的,还有其他更好/更简单的方法可以做到这一点。

dat <- data.frame(Gender = c('M','F','M','f','m'))
dat$Gender <- forcats::fct_collapse(dat$Gender,'M' = c('M','m'),'F' = c('F','f'))

dat
#  Gender
#1      M
#2      F
#3      M
#4      F
#5      M