首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将Bray不同的矩阵转换成成对的数据?

如何将Bray不同的矩阵转换成成对的数据?
EN

Stack Overflow用户
提问于 2022-04-26 23:12:20
回答 1查看 81关注 0票数 1

我有一个Bray数据,在R中有162个样本,但是我想把它转换成一个成对的数据,这样第1列有第一个站点,第2列是被比较的第二个站点,第3列是Bray-Curtis不同的值。我使用vegdist命令,设置upper=TRUE似乎不起作用,因为它继续为自己返回整个数据格式。

获取我的BrayCurtis数据的实际代码:

代码语言:javascript
复制
df <- vegdist(my_data, method="bray", upper=TRUE) # upper is not working, returning everything
df <- as.data.frame(as.matrix(df))

我不擅长在R中转换甚至创建数据格式,因此任何建议或工具都会对此有所帮助。BrayCurtis dataframe我有行和列标题作为站点,但我需要将其转换为成对的数据格式。

我的数据示例:

代码语言:javascript
复制
    A   B   C   D
A   0   2   1   1
B   2   0   2   1
C   1   2   0   1
D   1   1   1   0

作为输出,我想要的是上面的对角线值,但作为一个成对的表:

代码语言:javascript
复制
A   B   2
A   C   1
A   D   1
B   C   2
B   D   1
C   D   1
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-26 23:38:49

在R基地:

代码语言:javascript
复制
as.data.frame.table(as.matrix(df))|>
  transform(Var1 = as.character(Var1), Var2 = as.character(Var2)) |>
  subset(Var1<Var2)

  Var1 Var2 Freq
5     A    B    2
9     A    C    1
10    B    C    2
13    A    D    1
14    B    D    1
15    C    D    1

甚至:

代码语言:javascript
复制
idx <- lower.tri(df)
cbind(rev(expand.grid(dimnames(df)))[which(idx),], val = df[idx])

   Var2 Var1 df[idx]
2     A    B       2
3     A    C       1
4     A    D       1
7     B    C       2
8     B    D       1
12    C    D       1
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72021536

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档