删除重复的 2 列排列

标签 r duplicates dataframe

我找不到这个问题的好标题,所以请随时编辑它。

我有这个 data.frame

  section time to from
1       a    9  1    2
2       a    9  2    1
3       a   12  2    3
4       a   12  2    4
5       a   12  3    2
6       a   12  3    4
7       a   12  4    2
8       a   12  4    3

我想删除具有相同 to 的重复行和 from同时,不计算两列的排列:例如 (1,2) 和 (2,1) 是重复的。

所以最终输出将是:
  section time to from
1       a    9  1    2
3       a   12  2    3
4       a   12  2    4
6       a   12  3    4

我通过构造一个新的列键有一个解决方案,例如
  key <- paste(min(to,from),max(to,from))

并使用 duplicated 删除重复的 key ,但我认为这是肮脏的解决方案。

这里是我的数据的 dput
structure(list(section = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L), .Label = "a", class = "factor"), time = c(9L, 9L, 12L, 
12L, 12L, 12L, 12L, 12L), to = c(1L, 2L, 2L, 2L, 3L, 3L, 4L, 
4L), from = c(2L, 1L, 3L, 4L, 2L, 4L, 2L, 3L)), .Names = c("section", 
"time", "to", "from"), row.names = c(NA, -8L), class = "data.frame")

最佳答案

mn <- pmin(s$to, s$from)
mx <- pmax(s$to, s$from)
int <- as.numeric(interaction(mn, mx))
s[match(unique(int), int),]
  section time to from
1       a    9  1    2
3       a   12  2    3
4       a   12  2    4
6       a   12  3    4

这个想法归功于这个问题:Remove consecutive duplicates from dataframe尤其是@MatthewPlourde 的回答。

关于删除重复的 2 列排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14078507/

相关文章:

r - 重复测量的混合效应模型

r - 在 terra SpatRaster 中命名分类级别时,如何防止添加额外级别?

删除一行中的重复字符串

sql - 我可以将此 INSERT 和 DELETE 查询放入单个 INSERT 查询中吗

python - Pandas 数据帧 : How to groupby and sort "by blocks"?

sql - R中的交互式绘图

r - 如何根据 data.table 中的其他列创建新列?

java - 迭代可以替换为bulk 'Collection.addAll'

python - pandas-两列的值是列表,需要生成一个新的 df 来显示它们之间的所有值组合

python - 如何获取 pandas 数据框的字符串列表?