检测因子级别是否为数字或R中的字符串

时间:2016-12-12 20:23:05

标签: r

我在R中有一些数据带有丢失数据的特殊字符串。我希望将原始数据框subset转换为有效数据,并将其中只有缺少数据

在以下示例中,我有一些数值,以及两个缺少数据的字符串(MD1MD2)。

DF <- data.frame(x = c( 1, 2, 3, "MD1", 5, "MD2"))

如果只有少数这样的字符串,我可以枚举它们并提取子集(这不是我做的方式,但它很简单,符合这个问题的目的):

DF.invalid <- droplevels( subset(DF, x == "MD1" | x == "MD2") )
DF.valid <- subset(DF, x != "MD1" & x != "MD2")
DF.valid$x <- as.numeric(levels(DF.valid$x))[DF.valid$x]

我的问题是可能无法提前知道丢失的数据字符串。是否有正确(优雅)的方法来检测MD1MD2是否为非数字并实现此结果,而不检查数据帧并枚举非数字级别?

1 个答案:

答案 0 :(得分:1)

x成为因子列&#34;混合数字和字符级别&#34; (实际上所有级别都是字符)数据框dat

要提取&#34;字符级别&#34;,请使用:

na.idx <- is.na(suppressWarnings(as.numeric(levels(x))))
non.num.levels <- levels(x)[na.idx]

如果您想将dat与这些级别进行分组,则可以使用

subset(dat, x %in% non.num.levels)

但更好的方法是通过:

subset(dat, na.idx[x])