成对的唯一组合忽略了方向

时间:2016-05-23 10:37:50

标签: r dataframe

我想根据R中的公共字符聚合data.frame中的某个值。 问题是我对成对组合的不同方向不感兴趣。 所以例如

String

然后计算组合如下:

d = data.frame( x = LETTERS[1:5], y = LETTERS[5:1] )

  x y
1 A E
2 B D
3 C C
4 D B
5 E A

问题在于我对成对差异不感兴趣。因此,在这个简单的示例中,d$z <- paste0(d$x,d$y,sep="_") 应与A_E相同。

是否有一个聪明的简短解决方案来粘贴它们?我目前正在考虑在将它们组合成矢量之前对每一个进行排序。

2 个答案:

答案 0 :(得分:5)

一种选择是使用pminpmax

transform(d, z = paste(pmin(x,y), pmax(x,y), sep="_"))
#  x y   z
#1 A E A_E
#2 B D B_D
#3 C C C_C
#4 D B B_D
#5 E A A_E

请注意,如果characterfactor,则可能需要将x和y转换为d <- data.frame( x = LETTERS[1:5], y = LETTERS[5:1], stringsAsFactors = FALSE)

{{1}}

答案 1 :(得分:2)

这是一个替代方案,它的唯一优势在于它适用于因子,角色或基本上任何其他类。

d$z <- apply(d, 1, function(x) paste(sort(x), collapse="_"))
#> d
#  x y   z
#1 A E A_E
#2 B D B_D
#3 C C C_C
#4 D B B_D
#5 E A A_E
相关问题