2015-09-11 2 views
3

При создании матрицы корреляции на большом наборе данных существует множество переменных, которые имеют одинаковое значение во всем, поэтому корреляция не может быть выполнена и выводится NA. Мой вопрос заключается в том, как удалить все строки и столбцы с этими значениями NA или выполнить учет этого недостатка до вывода матрицы корреляции. Так, например, в этом примере ...Удаление NA из корреляционных выходов

df <- as.data.frame(matrix(sample(0:10, 3*8, replace=TRUE), ncol=3)) 
df$V4 <- rep(3, times = 8) 
df$V5 <- rep(2, times = 8) 
correlation <- cor(df) 

Я пробовал разные способы преодоления этого, во-первых, путем добавления использования в корреляции calcuation ...

correlation_two <- cor(df, use = "pairwise.complete.obs") 

Но это не имеет никакого влияния. Я также пробовал различные способы удаления значений NA, но ни один из них, похоже, не работает.

output1 <- na.omit(correlation) 
output2 <- correlation[complete.cases(correlation),] 
output3 <-correlation[,colSums(is.na(correlation))==0] 
output4 <- correlation[, !colSums(is.na(correlation)) >1,drop=FALSE] #Removing columns 
output4 <- output4[!rowSums(is.na(output4)) >1,drop=FALSE,]#Then rows 

Заранее спасибо.

+0

Не специально, если вы не можете удалить или отфильтровать те столбцы со стандартным отклонением, равным нулю перед тем, корреляция? –

+0

Извините, я удалил свой комментарий. Пожалуйста, см. Мой ответ. – Heroka

ответ

4

Я думаю, что лучше предотвратить проблему, чем решить ее впоследствии.

Определить столбцы, которые имеют только одно значение:

select_for_correlation <- sapply(df,function(x)(length(unique(x))>1)) 

Затем сделайте анализ:

res <- cor(df[,select_for_correlation]) 
    > res 
      V1   V2   V3 
V1 1.00000000 -0.06801818 -0.04626592 
V2 -0.06801818 1.00000000 -0.21533949 
V3 -0.04626592 -0.21533949 1.00000000 
+0

Это прекрасно работает! Я буду галочкой, когда он разрешит через 2 минуты. –

Смежные вопросы