2015-08-06 33 views
11

Tüm sütunları veya satırları bir veri çerçevesindeki% 50'den fazla NA s ile silmek istiyorum. Sütunları/satırları o% x eksik eksik sil

Bu

benim çözümdür:

# delete columns with more than 50% missings 
miss <- c() 
for(i in 1:ncol(data)) { 
    if(length(which(is.na(data[,i]))) > 0.5*nrow(data)) miss <- append(miss,i) 
} 
data2 <- data[,-miss] 


# delete rows with more than 50% percent missing 
miss2 <- c() 
for(i in 1:nrow(data)) { 
    if(length(which(is.na(data[i,]))) > 0.5*ncol(data)) miss2 <- append(miss2,i) 
} 
data <- data[-miss,] 

ama daha güzel/daha hızlı çözüm arıyorum.

Ben de NA bazı miktarda sütun kaldırmak için bir dplyr çözüm

+0

@Ricky Satır çözümüm hemen hemen aynı – spore234

+0

Ek satır çözümünü anladığımdan emin olmak için: Satır X başlangıçta% 50'den fazla NA'ya sahipse, ancak sütun 3'ten sonra X sütunundan kaldırılmışsa % 50'den az NA, satır X kaldırılmamalıdır? – Ricky

cevap

20

takdir ediyorum, sen rowMeans kullanarak satırlar için colMeans(is.na(...))

## Some sample data 
set.seed(0) 
dat <- matrix(1:100, 10, 10) 
dat[sample(1:100, 50)] <- NA 
dat <- data.frame(dat) 

## Remove columns with more than 50% NA 
dat[, -which(colMeans(is.na(dat)) > 0.5)] 

Ve benzer kullanabilirsiniz.

+0

, bu yüzden satırlar için -daha [-which (rowMeans (is.na (dat))> 0,5)]. Teşekkürler! – spore234

+1

@ spore234 HTH @PierreLafortune hızlı bir testten sonra eşdeğer bir 'özüm' çözümü kadar hızlı 3x gibi görünüyor. – jenesaisquoi