r - 如何在不删除 R 中存在 NA 的行的情况下执行聚类

标签 r cluster-analysis bioconductor

我有一个数据,其元素中包含一些 NA 值。 我想要做的是执行聚类而不删除行 NA 存在的地方。

据我了解,daisy 中的 gower 距离测量允许这种情况。 但为什么我下面的代码不起作用? 我欢迎“雏菊”以外的其他选择。

# plot heat map with dendogram together.

library("gplots")
library("cluster")


# Arbitrarily assigning NA to some elements
mtcars[2,2] <- "NA"
mtcars[6,7]  <- "NA"

 mydata <- mtcars

hclustfunc <- function(x) hclust(x, method="complete")

# Initially I wanted to use this but it didn't take NA
#distfunc <- function(x) dist(x,method="euclidean")

# Try using daisy GOWER function 
# which suppose to work with NA value
distfunc <- function(x) daisy(x,metric="gower")

d <- distfunc(mydata)
fit <- hclustfunc(d)

# Perform clustering heatmap
heatmap.2(as.matrix(mydata),dendrogram="row",trace="none", margin=c(8,9), hclust=hclustfunc,distfun=distfunc);

我收到的错误消息是这样的:

    Error in which(is.na) : argument to 'which' is not logical
Calls: distfunc.g -> daisy
In addition: Warning messages:
1: In data.matrix(x) : NAs introduced by coercion
2: In data.matrix(x) : NAs introduced by coercion
3: In daisy(x, metric = "gower") :
  binary variable(s) 8, 9 treated as interval scaled
Execution halted

最终,我想使用 NA 允许的数据执行分层聚类。

更新

使用 as.numeric 进行转换与上面的示例相同。 但是为什么从文本文件读取此代码时失败?

library("gplots")
library("cluster")

# This time read from file
mtcars <- read.table("http://dpaste.com/1496666/plain/",na.strings="NA",sep="\t")

# Following suggestion convert to numeric
mydata <- apply( mtcars, 2, as.numeric )

hclustfunc <- function(x) hclust(x, method="complete")
#distfunc <- function(x) dist(x,method="euclidean")
# Try using daisy GOWER function 
distfunc <- function(x) daisy(x,metric="gower")

d <- distfunc(mydata)
fit <- hclustfunc(d)

heatmap.2(as.matrix(mydata),dendrogram="row",trace="none", margin=c(8,9), hclust=hclustfunc,distfun=distfunc);

我得到的错误是这样的:

  Warning messages:
1: In min(x) : no non-missing arguments to min; returning Inf
2: In max(x) : no non-missing arguments to max; returning -Inf
3: In min(x) : no non-missing arguments to min; returning Inf
4: In max(x) : no non-missing arguments to max; returning -Inf
Error in hclust(x, method = "complete") : 
  NA/NaN/Inf in foreign function call (arg 11)
Calls: hclustfunc -> hclust
Execution halted

~

最佳答案

该错误是由于数据中存在非数字变量(数字编码为字符串)造成的。 您可以将它们转换为数字:

mydata <- apply( mtcars, 2, as.numeric )
d <- distfunc(mydata)

关于r - 如何在不删除 R 中存在 NA 的行的情况下执行聚类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20438019/

相关文章:

r - 结合列表中的 df 并仅对特定值求平均值

r - 二进制数据热图

r - 您可以静默安装 Bioconductor 软件包吗?

MacOS 上的 R 错误 : vector memory exhausted (limit reached? )

r - 在R中将数据框的多列从字符串转换为数字

r - 稳健回归中的 MM 估计

python - 最近簇距离(无质心)

Java-ml 聚类距质心的距离

r - 使用 R markdown 和 knitr 生成 PDF 文件,将 R 对象用于 YAML header

machine-learning - ELKI 可以处理多大的数据集?