R中的Co出现图

时间:2014-09-30 19:58:04

标签: r plot

我对R.非常新。我有一个看起来像

的csv文件
A   B   C   D
A1   a   v   a
A2   v   v   a
A3   a   a   a

我想用co occurrence plot使用它但是当输入有字符而不是数字时我无法弄清楚如何绘制它。

我尝试使用一些软件包(我无法让它们中的任何一个工作),其中一个是cooccur。它给了我以下错误"Error in rowSums(spp_site_mat, na.rm = T) : 'x' must be numeric"。 如果您指出我有用的任何内容或提供任何代码建议,我真的很感激。

编辑:

行将包含A列中的值,列将是其对应的值,“a”和“v”的内容如此link所示。

enter image description here

此外,我有数百列,因此无法使用as.numeric(table$B)

将每列更改为数字

1 个答案:

答案 0 :(得分:2)

您可以table每行计算唯一值,然后使用rbind.fill形成矩阵。然后,您可以使用geom_tile作为标签添加计数。

# your data
dat <- read.table(text="A   B   C   D
A1   a   v   a
A2   v   v   a
A3   a   a   a", header=TRUE)


library(plyr)
library(ggplot2)
library(reshape2)

# transform your data 
mat <- rbind.fill.matrix(apply(dat[-1], 1, function(i) t(as.matrix(table(i)))))
mat[is.na(mat)] <- 0
rownames(mat) <- dat$A

# plot   
ggplot(melt(mat), aes(Var2, Var1, fill=value)) + 
                 geom_tile() +
                 scale_fill_gradient(limits=c(0,3), low="white") +
                 geom_text( aes(label=value))

enter image description here

修改

关于代码

mat <- rbind.fill.matrix(apply(dat[-1], 1, function(i) t(as.matrix(table(i)))))

从内部开始

apply(dat[-1], 1, function(i) t(as.matrix(table(i))))
带有apply

MARGIN = 1在数据行中应用该函数,不包括第一列。该函数的目的是表示每行的值。 as.matrix用于更改输出的格式,t(转置)更改矩阵的方向。 (很可能是一种更简洁的方式)

由于每行中可能没有相同的值(第3行没有v),因此每个表中都不会显示所有值 - 因此rbind将不起作用。来自rbind.fill包的plyrNA填充。

下面用零替换缺少的(NA

mat[is.na(mat)] <- 0