我有以下数据框,我需要计算所有行之间的成对差异(这里是名称)。
names<- c("t1","t2","t3","t4","t5","t6","t7","t8")
v1 <- c(2,3,4,2,2,4,7,12)
v2 <- c(15,12,2,2,3,1,7,12)
v3<- c(2,3,2,16,14,11,2,7)
v4<- c(12,3,4,5,9,1,12,13)
mydf<- data.frame(names,v1,v2,v3,v4)
因此预期输出需要与dist(mydf [-1])给出的类似,但这些数字是名义字符,值的顺序也很重要。 例如:&#34; t1和&#34; t2&#34;是4/4不同而#34; t1&#34; &安培; &#34; T3&#34;差异是3/4。
由于
答案 0 :(得分:2)
怎么样:
ans <- expand.grid(first=1:nrow(mydf), second=1:nrow(mydf))
ans$diff <- apply(ans, 1, function(x) {
ncols <- ncol(mydf)-1
sum(mydf[x[1],-1] != mydf[x[2],-1]) / ncols
})
m <- matrix(ans$diff, nrow = nrow(mydf))
colnames(m) <- rownames(m) <- names
m