Bunu gerçekleştiren bir tcrossprod sürümü olabilir, ancak bulamadım. Aşağıdaki örnekte, sipariş önemli değilse, yalnızca bir kombinasyonun ilk oluşumunu içeren satırları nasıl alabilirim? Yani (1,2) benim için (2,1) ile aynıdır.Benzersiz birleşimlerle birlikte tcrossprod
a <- c(1,2,3,4)
b <- c(10,5,4,10)
df<- data.frame(a,b)
melt(tcrossprod(df$b,1/df$b))
> melt(tcrossprod(df$b,1/df$b))
Var1 Var2 value
1 1 1 1.00
2 2 1 0.50
3 3 1 0.40
4 4 1 1.00
5 1 2 2.00
6 2 2 1.00
7 3 2 0.80
8 4 2 2.00
9 1 3 2.50
10 2 3 1.25
11 3 3 1.00
12 4 3 2.50
13 1 4 1.00
14 2 4 0.50
15 3 4 0.40
16 4 4 1.00
bitlik bir kesmek ancak çalışır: 'tt <- tcrossprod (df $ b 1/df $ b); tt [upper.tri (tt)] <- NA; reshape2 :: eriyik (tt, na.rm = T); – user20650
@ user20650 Tablodaki ilk oluşumlar alt üçgen kısma karşılık geliyor, "upper.tri" yerine "lower.tri" kullanılmalı ve Ayrıca bu diyagonal unsurları da istediğimizden argüman 'diag = TRUE' kullanılmalıdır. – tkmckenzie
hi @tkmckenzie; kodu deneyin - doğru sırayı ürettiğini düşünüyorum ve 'diag = TRUE' istemiyoruz, çünkü burası 'NA' – user20650