我有一个连续字段(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;)获得零分。)