【问题标题】:Removing mutual reference rows in R dataframe i.e. when (a, b) value in a row exists as (b, a) in another row of the same dataframe [duplicate]删除R数据帧中的相互引用行,即当一行中的(a,b)值作为(b,a)存在于同一数据帧的另一行中时[重复]
【发布时间】:2019-09-27 18:15:05
【问题描述】:

假设我有一个数据框 (df),它应该包含个人之间的友谊链接。这样,A 列中的值(例如个人 ID)和 B 列中的值表明个人 A 与个人 B 是朋友(有关系)。事实上,这样的 df 可以很容易地转换为图(例如 igraph )。

由于关系是相互的,因此我们有 A - B 值就足够了。

但是,我有这么大的 df,其中一些行还包括 B - A 值(如有向图,A 是 B 的朋友,B 是 A 的朋友,这是多余的),问题是如何删除这些多余的行。

这是一个非常简单的例子:

df <- data.frame("A"= c(1, 10, 1,  1,  2,  2, 14, 4),
                 "B"= c(10, 1, 11, 12, 13, 14, 2, 15))

A          B
1         10
10         1
1         11
1         12
2         13
2         14
14        2
4         15 

删除相互引用后,df应该变成:

A          B
1         10
1         11
1         12
2         13
2         14
4         15

【问题讨论】:

  • See here 提出一个人们可以帮助解决的 R 问题。这包括数据样本和所有必要的代码(不是来自图片,我们无法从中复制代码)。
  • 你在 13 之后忘记了逗号
  • 非常感谢所有 cmets 和提示。特别感谢@qq3254告知错误(逗号加13)以及优秀的解决方案。

标签: r


【解决方案1】:

我相信你正在寻找这样的东西。

对数据框进行水平排序。删除重复的行。

df <- data.frame("A" = c(1, 10, 1,  1,  2,  2, 14, 4),
                     "B" = c(10, 1, 11, 12, 13, 14, 2, 15))
sorted <- t(apply(df, 1, function(x) sort(x)))
df[!duplicated(sorted), ]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-28
    • 2011-12-23
    • 1970-01-01
    相关资源
    最近更新 更多