在因子类型列中将NA替换为0

时间:2016-04-27 19:54:18

标签: r

我有一个连续字段(HighBAC),我试图根据BAC是否属于某个范围进行分类:

BAC> =。16或< .21:第1类

BAC> = .09或< .16:第2类

State       Year    high_bac
Alabama     2016    0.15
Alabama     2015    0.15
Alabama     2011    N
Alabama     2010    N
Arizona     2016    0.15
Arizona     2015    0.15
Idaho       2016    0.2
Idaho       2015    0.2
Idaho       2014    O
Idaho       2013    O

但在我取代N' N'之前我无法做到这一点。和' O' NA的字符。否则,cut()功能无法正常工作。

df_codes$high_bac[df_codes$high_bac=='N'|df_codes$high_bac=='O'] = NA
df_codes$high_bac = as.numeric(df_codes$high_bac)
df_codes$high_bac <- cut(df_codes$high_bac, breaks=c(.09, .16, .22), right=FALSE, labels=c(2:1))

输出:

State       Year    high_bac
Alabama     2016    2
Alabama     2015    2
Alabama     2011    NA
Alabama     2010    NA
Arizona     2016    2
Arizona     2015    2
Idaho       2016    1
Idaho       2015    1
Idaho       2014    NA
Idaho       2013    NA

我想将NA s替换为0,我将它们分类后,因为0是一个特殊代码(不应该作为一个类别包含在内)。但是当我使用this post中建议的解决方案时,我收到以下错误:

df_codes$high_bac[is.na(df_codes$high_bac)] <- 0
  

警告讯息:   在[<-.factor*tmp*,is.na(df_codes $ high_bac)中,value = c(1L,:   无效因子水平,NA生成

is.na()不适用于因子类型列吗?如果是这种情况,是否有另一种方法可以将所有NA替换为0?或者有没有办法将cut()与非数字列一起使用?

(背景:我根据超级醉酒驾驶员的门槛对各州进行分类.BAC门槛较低的州获得更多分数。但是没有超级BAC级别的州(&#39; N&#39; ;或者&#39; O&#39;)获得零分。)

0 个答案:

没有答案