3

グリッドを展開すると、次の結果が得られます。

d <- expand.grid(c("x","y","z"),c("x","y","z"))

ベクトルが 3 よりも長く、文字列の長さがそれよりも大きいか、パターンが異なる可能性があることに注意してください。

私が望むのは、文字列の組み合わせを作成することですが、すべての組み合わせの半分だけです:

  Var1 Var2
1    x    x
2    y    x
3    y    y
4    z    y
5    x    z
6    z    z
4

1 に答える 1

4

重複 ( x- y== y- x) を取り除くには、最初にデータ内の行を並べ替えてから、以下を使用して重複を取り除きますduplicated

d2 = t(apply(d, 1, sort))
d2[!duplicated(d2),]
     [,1] [,2]
[1,] "x"  "x" 
[2,] "x"  "y" 
[3,] "x"  "z" 
[4,] "y"  "y" 
[5,] "y"  "z" 
[6,] "z"  "z" 

または、 を使用combnして組み合わせを取得することもできます。その後、必要なものを取得するためにデータをいじるだけで済みます。

levs = c("x", "y", "z")
comb_level1 = combn(levs, 1)
comb_level2 = combn(levs, 2)
t(cbind(rbind(comb_level1, comb_level1), comb_level2))
     [,1] [,2]
[1,] "x"  "x" 
[2,] "y"  "y" 
[3,] "z"  "z" 
[4,] "x"  "y" 
[5,] "x"  "z" 
[6,] "y"  "z"

を使用したソリューションの方が優れていると思いますduplicated

于 2013-06-10T05:37:26.490 に答える