r - R按大数据完全倒置的列分组
问题描述
我正在尝试按非常具体的条件对我的数据进行分组。考虑下面的data.frame:
from <- c("a", "b", "a", "b")
to <- c("b", "a", "b", "a")
give <- c("x", "y", "y", "x")
take <- c("y", "x", "x", "y")
amount <- c(1, 2, 3, 4)
df <- data.frame(from, to, give, take, amount)
它创建了类似的东西:
| from | to | give | take | amount
---------------------------------------
1 | a | b | x | y | 1
2 | b | a | y | x | 2
3 | a | b | y | x | 3
4 | b | a | x | y | 4
提供一些背景知识:考虑“from”列中的某个用户向“to”列中的用户提供某些东西(在“give”列中)并作为回报(在“take”列中)。如您所见,第 1 行和第 2 行在这种方式上是相同的,因为它们描述了相同的场景,只是形成了另一个视角。因此,我希望这些属于同一组。(您也可以将它们视为重复项,这涉及相同的任务,即将它们识别为相似。)第 3 行和第 4 行也是如此。该数量是每个组要总结的某个值,以使示例清晰。
我对它们进行分组的期望结果如下。
| user1 | user2 | given_by_user1 | taken_by_user1 | amount
-----------------------------------------------------------
| a | b | x | y | 3 # contains former rows 1&2
| a | b | y | x | 7 # contains former rows 3&4
请注意,from&to和give&take 都需要反转,即从两列中获取值,对它们的值进行排序并在此基础上认为它们相等不是我需要的。这将导致上述示例中的所有四行都被视为相等。在类似的帖子中提出了这种解决方案,例如:
我已经阅读了许多类似的解决方案,并找到了一个确实可以解决问题的解决方案:
但是,建议的解决方案创建了outer
两列的乘积,这在我的情况下是不可行的,因为我的数据有数百万行,每列中至少有数千个唯一值。
(任何直接对行进行分组或获取属于同一组的行的索引的解决方案都很棒!)
非常感谢您的任何建议!