2016-12-12 40 views
1

我有一些R中的數據,它包含缺少數據的特殊字符串。我想subset原始數據幀爲有效數據和一個只有缺失數據檢測因子級別是數字還是R中的字符串

在下面的示例中,我有一些數字值和缺少數據的兩個字符串(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

做'as.numeric(levels(df $ x)[df $ x])',那些變成'NA'的是非數字的。 –

回答

1

x成爲數據幀dat的因數列「具有混合數字和字符級別」(實際上所有級別都是字符)。

要提取 「級人物」,使用方法:

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]) 
+0

在你看來,我應該在這裏使用data.table,而不是data.frames? – philsf

相關問題