我有一个Bray数据,在R中有162个样本,但是我想把它转换成一个成对的数据,这样第1列有第一个站点,第2列是被比较的第二个站点,第3列是Bray-Curtis不同的值。我使用vegdist命令,设置upper=TRUE似乎不起作用,因为它继续为自己返回整个数据格式。
获取我的BrayCurtis数据的实际代码:
df <- vegdist(my_data, method="bray", upper=TRUE) # upper is not working, returning everything
df <- as.data.frame(as.matrix(df))我不擅长在R中转换甚至创建数据格式,因此任何建议或工具都会对此有所帮助。BrayCurtis dataframe我有行和列标题作为站点,但我需要将其转换为成对的数据格式。
我的数据示例:
A B C D
A 0 2 1 1
B 2 0 2 1
C 1 2 0 1
D 1 1 1 0作为输出,我想要的是上面的对角线值,但作为一个成对的表:
A B 2
A C 1
A D 1
B C 2
B D 1
C D 1发布于 2022-04-26 23:38:49
在R基地:
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甚至:
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 1https://stackoverflow.com/questions/72021536
复制相似问题