【发布时间】:2015-01-14 18:32:38
【问题描述】:
我有以下展开网格的结果:
d
注意向量可能长于 3 和字符串长度 可能更大或不同的模式?
我想要的是创建一个字符串组合 但只有所有组合的一半:
Var1 Var2
1 x x
2 y x
3 y y
4 z y
5 x z
6 z z
【问题讨论】:
我有以下展开网格的结果:
d
注意向量可能长于 3 和字符串长度 可能更大或不同的模式?
我想要的是创建一个字符串组合 但只有所有组合的一半:
Var1 Var2
1 x x
2 y x
3 y y
4 z y
5 x z
6 z z
【问题讨论】:
您可以删除重复项 (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 的解决方案更好。
【讨论】: