将存在/不存在数据转换为R中的共现矩阵[重复]

ktecyv1j  于 2023-11-14  发布在  其他
关注(0)|答案(1)|浏览(85)

这个问题已经有答案了

How do I count the number of times any two given values occur together in a row in R?(2个答案)
17天前关闭
我正在尝试从存在和不存在数据创建一个共存矩阵。数据结构目前测量每个物种是否拥有每种细胞类型(X,Y或Z)。如果细胞类型存在于该物种中,则为1,如果不存在于该物种中,则为0。

x <- c(1, 1, 1)
y <- c(0, 1, 0)
z <- c(1, 1, 0)

df_pa_species<-data.frame(species, x, y, z)

字符串
它会生成一个类似于下面的嵌套框架:

Species           X               Y               Z
A                 1               0               1
B                 1               1               1
C                 1               0               0


我试图生成一个矩阵,它将计算两种细胞类型共出现的次数。在这个例子中,X与Z共出现两次,Y共出现一次。我的理想输出将是这样的矩阵:

X       Y       Z
X       -        1       2
Y       1        -       1
Z       2        1       -


我正在努力制作这个矩阵,因为每行1的数量因物种而异。我尝试将数据转换为以下格式:

db4 <- data.frame(df_pa_species[1], cols = apply(df_pa_species[-1], 1, function(x)
  paste(names(x)[x==1], collapse=",")), stringsAsFactors = FALSE)

Species     cols
A                x,z
B                x,y,z
C                x


最终目标是让它更接近我看到的这些例子:(How to calculate a (co-)occurrence matrix from a data frame with several columns using R?Transforming matrix of presence/absence to Data.frame of vertice connection. (Removing duplicated rows with eeuqal unordered values))然而,我的行的总和并不相同,我似乎不能让这些工作不平等的行。

y4ekin9u

y4ekin9u1#

您可以使用crossprod来执行此操作

result <- crossprod(as.matrix(df_pa_species[,-1]))
diag(result) <- NA
result
#    x  y  z
# x NA  1  2
# y  1 NA  1
# z  2  1 NA

字符串

相关问题