我有一个很大的距离矩阵和一个相应的数据帧,一个小例子是:
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
是彼此的技术性重复,由Triplicate
中df
列中的相同值表示。矩阵A表示样本彼此的“距离或不相似性”。如何对矩阵进行分组,以便向df
添加一列,以便对于任何样本:
一个。与其相应的一式三份样品的两个距离中的最小值。例如,在矩阵A
A1中:B1距离为1且A1:C1距离为2,因此将df
列minimum
中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
样本,所以在匹配样本距离时参考它很重要。我会立即解决任何问题......
谢谢!
答案 0 :(得分:0)
怎么样
df$minimum <- apply(A, 1, function(x) min(x[x > 0]))
df$average <- apply(A, 1, function(x) mean(x[x > 0]))