r - R 中的共现图

标签 r plot

我对 R 非常陌生。我有一个 csv 文件,看起来像

A   B   C   D
A1   a   v   a
A2   v   v   a
A3   a   a   a

我想使用它制作一个共现图,但我不知道当输入有字符而不是数字时如何绘制它。

我尝试使用一些软件包(我无法让它们中的任何一个工作),其中一个是cooccurr。它给了我以下错误“rowSums(spp_site_mat,na.rm = T)中的错误:'x'必须是数字”。 如果您向我指出任何有用的内容或提供任何代码建议,我将非常感激。

编辑:

行将具有 A 列的值,列将是其相应的值,“a”和“v”如 link 所示。 .

enter image description here

此外,我有数百列,因此我无法使用 as.numeric(table$B) 将每一列更改为数字

最佳答案

您可以表格每一行来计算唯一值,然后使用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))))

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

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

下面用零替换缺失的 (NA)

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

关于r - R 中的共现图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26129038/

相关文章:

r - 如何使用 "cols()"和 "col_double"将逗号作为小数点

r - 如何循环遍历列并创建不同的图?

matlab - 在 "hold on"后面加上 "figure"导致剧情不一样

r - 如何根据R基矩阵散点图中的因子对数据进行着色?

r - 在 ggplot [R] 中使用限制时数据丢失

javascript - checkboxGroupInput 包含每个刻度的选项(多个可能的刻度)

r - 分组条形图自定义颜色

r - R 中意外的快速排序行为

matlab - 在图例中平方而不是线条 Matlab

r - 使用 R 的 3D 透明球体内的轨迹图