在字符向量中查找唯一的条目对

时间:2014-04-11 23:12:47

标签: r vector dataframe unique

我有一个带有三个条目fruit的向量Peach, Plum, Pear。我想在fruit中找到每个唯一的配对,并创建一个新的两列data.frame(例如下面的df.new)。我怎么能在r中为更大的data.set做这个? expand.grid导致pear-plumplum-pear不是唯一的配对,或者不是我要寻找的配对。有什么建议吗?

fruit <- c("Peach", "Plum", "Pear")

fruit1 <- c("Peach", "Peach", "Plum")
fruit2 <- c("Plum", "Pear", "Pear")
df.new <- data.frame(fruit1, fruit2)

#df.new
fruit1 fruit2
1  Peach   Plum
2  Peach   Pear
3   Plum   Pear

# attempt
fruit.y <- fruit
df.expand <- expand.grid(fruit,fruit.y)

1 个答案:

答案 0 :(得分:1)

使用您的初始策略,您仍然可以尝试展开网格:

fruit_df <- expand.grid(fruit,fruit)

然后按水果排序每一行并删除重复项:

fruit_df2 <- as.data.frame(unique(t(apply(fruit_df, 1, function(x) sort(x)))))

     V1    V2
1 Peach Peach
2 Peach  Plum
3 Peach  Pear
4  Plum  Plum
5  Pear  Plum
6  Pear  Pear

另一种策略是在fruit中生成所有对的组合,尝试:

combn(fruit,2)

     [,1]    [,2]    [,3]  
[1,] "Peach" "Peach" "Plum"
[2,] "Plum"  "Pear"  "Pear"

或者将输出作为数据框,转换结果并重新制作:

as.data.frame(t(combn(fruit,2)))

请注意,使用combn您将无法获得plum-plum