2011-05-11 53 views
22

比方说,例如,我有这样的数据:删除行

data <- c(1,2,3,4,5,6,NaN,5,9,NaN,23,9) 
attr(data,"dim") <- c(6,2) 
data 

    [,1] [,2] 
[1,] 1 NaN 
[2,] 2 5 
[3,] 3 9 
[4,] 4 NaN 
[5,] 5 23 
[6,] 6 9 

现在我想与NaN的删除行它的值:行1和4 但我不”不知道这些行在哪里,如果它是100.000+行的数据集,所以我需要用函数找到它们并删除整行。

任何人都可以指向正确的方向吗?

回答

37

功能complete.cases会告诉你其中的行,你需要:

data <- matrix(c(1,2,3,4,5,6,NaN,5,9,NaN,23,9), ncol=2) 
data[complete.cases(data), ] 

    [,1] [,2] 
[1,] 2 5 
[2,] 3 9 
[3,] 5 23 
[4,] 6 9 
5

DATA

data <- matrix(rnorm(100000000), ncol=10000) 
idx <- sample(1:10000,100) 
idy <- sample(1:10000,100) 
data[idx,idy] <- NaN 

功能

foo <- function(d=data) d[apply(d,2,function(x) any(is.nan(x))),] 

运行时

> system.time(data[complete.cases(data),]) 
    user system elapsed 
    3.53 0.12 3.65 

> system.time(foo(data)) 
    user system elapsed 
    2.37 0.09 2.46 
+1

不应该这是'd [!apply(d,1,function(x)any(is.nan(x))),]'? (使用“1”代替“2”,并使用“!”只能得到没有NaN的行?) – MeloMCR 2015-09-08 17:24:05