【发布时间】:2020-05-23 09:19:06
【问题描述】:
从偶然事件matrix,我们可以计算每对行之间的差异,然后将输出转换为data.frame。
例如,使用 Bray-Curtis 距离,我们可以:
# Generate matrix -------------------------------------------------------------
set.seed(1)
ex <- matrix(data = round(runif(100000), 1), nrow = 1000, ncol = 100)
rownames(ex) <- paste0("row", 1:nrow(ex))
colnames(ex) <- paste0("col", 1:ncol(ex))
ex[1:5, 1:5]
col1 col2 col3 col4 col5
row1 0.3 0.5 0.9 0.8 0.2
row2 0.4 0.7 1.0 0.5 0.5
row3 0.6 0.4 0.9 0.2 0.0
row4 0.9 1.0 0.4 0.4 0.5
row5 0.2 0.1 0.2 0.8 0.9
# Dissimilarity ---------------------------------------------------------------
# Example of Bray-Curtis
library(ecodist)
bray <- bcdist(ex, rmzero = FALSE)
bray <- as.matrix(bray)
bray[upper.tri(bray)] <- NA
diag(bray) <- NA
# Convert distance matrix into data.frame
bray <- reshape2::melt(bray, varnames = c("id1", "id2"))
# Remove NAs
bray <- bray[complete.cases(bray), ]
head(bray)
id1 id2 value
2 row2 row1 0.2767599
3 row3 row1 0.3541247
4 row4 row1 0.3588235
5 row5 row1 0.3935618
6 row6 row1 0.2948328
7 row7 row1 0.4045643
现在,我很想知道是否有可能从长格式 data frame 中获得相同的输出 bray(即具有 3 列的 data frame)作为输入。
例如,如果我们将上面提供的示例matrix 转换为:
# From a data.frame -----------------------------------------------------------
ex_df <- reshape2::melt(ex)
colnames(ex_df) <- c("row", "col", "value")
是否有可能获得相同的bray 输出,其中包含每对行之间的 Bray-Curtis 相异性?
我打赌高效的dplyr 或data.table 解决方案存在。
【问题讨论】:
标签: r dataframe dplyr data.table