计算矩阵中匹配样本的最小距离

时间:2018-01-03 21:11:33

标签: r matrix

我有一个很大的距离矩阵和一个相应的数据帧,一个小例子是:

A = matrix( c(0, 1, 2, 1, 0, 2, 2, 2, 0), nrow=3, ncol=3, byrow = TRUE)        
dimnames(A) = list(c("A1", "B1", "C1"), c("A1", "B1", "C1"))
df <- data.frame("ID" = c("A1", "B1", "C1"), "Triplicate" = c("T1", "T1", "T1"))

A1, B1, C1是彼此的技术性重复,由Triplicatedf列中的相同值表示。矩阵A表示样本彼此的“距离或不相似性”。如何对矩阵进行分组,以便向df添加一列,以便对于任何样本:

一个。与其相应的一式三份样品的两个距离中的最小值。例如,在矩阵A A1中:B1距离为1且A1:C1距离为2,因此将dfminimum中A1的这两个距离值中的最小值附加为1并且同样最小距离A1和C1的距离为A1和A1,B1距离为C1,给我:

df$minimum <- c(1, 1, 2) 
df

湾同样,我想追加另一列平均值,使其为两个距离的平均值,因此对于A1,C1和B1的距离平均值为(1 + 2)/ 2 = 1.5,类似于B1和C1给出的: / p>

df$average <- c(1.5, 1.5, 2)
df

希望这更清楚,我有很多这样的Triplicate样本,所以在匹配样本距离时参考它很重要。我会立即解决任何问题......

谢谢!

1 个答案:

答案 0 :(得分:0)

怎么样

df$minimum <- apply(A, 1, function(x) min(x[x > 0]))
df$average <- apply(A, 1, function(x) mean(x[x > 0]))