基于多列检索唯一记录的数据框

时间:2019-01-22 20:04:14

标签: r

我正在使用pairwise_cor函数来生成文本中的单词相关性。问题是,考虑到两列的组合时,输出包含重复的行。我想过滤掉重复的行。

这是一个极其简化的示例:

item1 <- c("dog", "cat", "horse", "cow", "chicken", "sheep")
item2 <- c("cat", "dog", "cow", "horse", "sheep", "chicken")
correlation <- c(2,2,3,3,4,4)

df <- cbind.data.frame(item1, item2, correlation)
df


    item1   item2 correlation
1     dog     cat     2
2     cat     dog     2
3   horse     cow     3
4     cow   horse     3
5 chicken   sheep     4
6   sheep chicken     4

所以从本质上讲,第1行和第2行是相同的,只是对item1和item2进行了触发器。第3和第4行以及第5和第6行也是如此。

我希望过滤后的输出数据帧为:

    item1   item2 correlation
1     dog     cat     2
2   horse     cow     3
3 chicken   sheep     4

至少可以理解,使用unique()不仅仅是一个简单的问题。

1 个答案:

答案 0 :(得分:1)

这是使用sqldf软件包的一种选择。假设您不关心从重复项中保留的 correlation,我们可以尝试:

library(sqldf)

sql <- "SELECT MIN(item1, item2) AS item1, MAX(item1, item2) AS item2,
               MAX(correlation) AS correlation
        FROM df
        GROUP BY MIN(item1, item2), MAX(item1, item2)"

output <- sqldf(sql)

鉴于您重复的行可能并不总是相邻的,因此此sqldf选项可能对您有用,因为在SQL表中,表是基于无序记录的。因此,相邻的要求不是问题。