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

Cur*_*lew 3 r dataframe

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

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
Run Code Online (Sandbox Code Playgroud)

然后计算组合如下:

d$z <- paste0(d$x,d$y,sep="_")
Run Code Online (Sandbox Code Playgroud)

问题是我对成对差异不感兴趣.所以A_E应该和E_A这个简单的例子一样.

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

tal*_*lat 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
Run Code Online (Sandbox Code Playgroud)

请注意,character如果它们是factors ,您可能需要将x和y转换为.


d <- data.frame( x = LETTERS[1:5], y = LETTERS[5:1], stringsAsFactors = FALSE)
Run Code Online (Sandbox Code Playgroud)