我在R中有一些数据带有丢失数据的特殊字符串。我希望将原始数据框subset
转换为有效数据,并将其中只有缺少数据。
在以下示例中,我有一些数值,以及两个缺少数据的字符串(MD1
和MD2
)。
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]
我的问题是可能无法提前知道丢失的数据字符串。是否有正确(优雅)的方法来检测MD1
和MD2
是否为非数字并实现此结果,而不检查数据帧并枚举非数字级别?
答案 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])