2013-10-08 38 views
7

伙计们我是这种语言的新手,我正在对数据框进行聚类分析,但是当计算距离时,我会收到警告“由胁迫引入的NAs”。这是什么意思?“通过强制引入的NAs”在R中的聚类分析期间

d <- dist(as.matrix(mydata1)) 

    Warning message: 
In dist(as.matrix(mydata1)) : NAs introduced by coercion 

我的数据样本是

Metafamily  Total   July cpc  July cse_pla July offline July organic 
xerox 8560  275.829417 0.20943223 0.032628862  0.169210813 0.1130048 
office-supplie 246.9125664 0.057833047 0.020209909  0.535358617 0.136165617 

在此除了Metafamily列中的所有列是类数字。

伙计们请帮我解决这个问题。

回答

13

这是创建该问题是第一列:

> a <- c("1", "2",letters[1:5], "3") 
> as.numeric(a) 
[1] 1 2 NA NA NA NA NA 3 
Warning message: 
NAs introduced by coercion 

dist必须有一个强迫的数字,其产生NA如上。

我最好的建议,而不在第一列或更好的移动应用dist,为rownames如果可能的话,因为结果会有所不同:

> dist(df) 
      1   2   3   4 
2 1.8842186        
3 1.9262360 1.2856110      
4 3.2137871 1.7322788 2.9838920   
5 1.3299455 0.9872963 1.9158079 1.8889050 
Warning message: 
In dist(df) : NAs introduced by coercion 
> dist(df[-1]) 
     1  2  3  4 
2 1.538458       
3 1.572765 1.049697     
4 2.624046 1.414400 2.436338   
5 1.085896 0.806124 1.564251 1.542284 

BTW:调用dist当你不需要as.matrix。无论如何,它会在内部做到这一点。

编辑:使用rownames

rownames(df) <- df$id 

> df 
    id  var1  var2 
A A -0.6264538 -0.8204684 
B B 0.1836433 0.4874291 
C C -0.8356286 0.7383247 
D D 1.5952808 0.5757814 
E E 0.3295078 -0.3053884 

> dist(df[-1]) # you colud also remove the 1st col at all, using df$id <- NULL. 
     A  B  C  D 
B 1.538458       
C 1.572765 1.049697     
D 2.624046 1.414400 2.436338   
E 1.085896 0.806124 1.564251 1.542284 
+0

@米歇尔 - 谢谢:) – Ravee

+0

@Ravee欢迎您。请使用rownames用法检查编辑 – Michele