具有独特组合的R tcrossprod

具有独特组合的R tcrossprod,r,melt,cross-product,R,Melt,Cross Product,可能有一个版本的tcrossprod实现了这一点,但我没有找到它。从下面的示例中,如果顺序不重要,如何仅获取第一次出现组合的行?即(1,2)对我来说与(2,1)相同 a具有m位的技巧,但有效:tt@user20650我认为表中第一次出现的对应于下三角部分,应该使用lower.tri而不是upper.tri,并且应该另外使用参数diag=TRUE,因为我们也需要这些对角线元素;尝试代码-我认为它产生了正确的顺序,我们不想要diag=TRUE,因为这会将对角线条目设置为NA@user20650我的错

可能有一个版本的tcrossprod实现了这一点,但我没有找到它。从下面的示例中,如果顺序不重要,如何仅获取第一次出现组合的行?即(1,2)对我来说与(2,1)相同


a具有
m位的技巧,但有效:
tt@user20650我认为表中第一次出现的对应于下三角部分,应该使用
lower.tri
而不是
upper.tri
,并且应该另外使用参数
diag=TRUE
,因为我们也需要这些对角线元素;尝试代码-我认为它产生了正确的顺序,我们不想要
diag=TRUE
,因为这会将对角线条目设置为
NA
@user20650我的错误,我的思维在不同的轨道上,我读代码太快了,你完全正确。应该是
子集(m,X1>=X2)
当然,如果需要考虑对角线元素,它可以是X1>=X2。我没有这样做,因为OP没有说任何关于它们的事情,我从他之前关于这个主题的问题()中假设对角线元素在这里不感兴趣。啊哈,我不知道还有其他相关的问题,所以我只想说“组合的第一次出现”。
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
subset(m,X1>X2)

#   X1 X2 value
#2   2  1   0.5
#3   3  1   0.4
#4   4  1   1.0
#7   3  2   0.8
#8   4  2   2.0
#12  4  3   2.5