如何使用字符串元素expand.net(一半!)

时间:2013-06-10 05:30:19

标签: r dataframe

我有以下扩展网格的结果:

  

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

1 个答案:

答案 0 :(得分: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的解决方案更好。