比较两列组成的组并返回索引匹配项R

比较两列组成的组并返回索引匹配项R,r,dataframe,compare,R,Dataframe,Compare,非常感谢你的阅读。我确信这是一项简单的任务,为此道歉 我有一个数据帧: (已编辑:添加了不包含在比较中的额外列) 我想将c和d列组与d和c列组进行比较。也就是说,对于一行,我想将c和d中的组合值与所有其他行的d和c中的组合值进行比较 (注意,值可以是字符或整数) 在这些匹配的地方,我想返回匹配行的索引,最好是列表列表。我需要能够访问索引,而无需参考列c或d中的值 即,对于上述数据帧,我的预期输出为: c(c(2, 6), c(3, 4)) ((2,6), (3,4)) 作为: 我知道如何使用m

非常感谢你的阅读。我确信这是一项简单的任务,为此道歉

我有一个数据帧: (已编辑:添加了不包含在比较中的额外列)

我想将
c
d
列组与
d
c
列组进行比较。也就是说,对于一行,我想将
c
d
中的组合值与所有其他行的
d
c
中的组合值进行比较

(注意,值可以是字符或整数)

在这些匹配的地方,我想返回匹配行的索引,最好是列表列表。我需要能够访问索引,而无需参考列
c
d
中的值

即,对于上述数据帧,我的预期输出为:

c(c(2, 6), c(3, 4))
((2,6), (3,4))
作为:

我知道如何使用
match
melt
来确定两个独立列的匹配情况,但如果将它们连接在一起并迭代所有可能的行组合,则无法确定匹配情况

我的设想是:

lapply(1:6, function(x), ifelse((df$a & df$b) == (df$b & df$a), index(x), 0))
但很明显,这是不正确的,是行不通的

我咨询了以下问题,但无法给出答案。我不知道从哪里开始


如何实现上述目标?

您可以这样做。它根据df列形成的唯一排序字符串,拆分行索引
1:nrow(df)
。排序可确保
A,B
B,A
得到相同的处理

duplist <- split(1:nrow(df),apply(df,1,function(r) paste(sort(r),collapse=" ")))

duplist
$`alan edd`
[1] 2 6

$`alex david`
[1] 1

$`ben pete`
[1] 3 4

$`raymond richard`
[1] 5

duplist如何指定列名?也就是说,如果有两个其他列具有不同的名称?这将适用于任意数量的列,前提是df仅包含名称列。列的名称无关紧要。或者,如果您只想比较一对特定的列,您可以将
df[,c(“e”,“f”)]]
替换为
df
。理想情况下,我只想保留那些具有匹配项的对,而不是只返回一行。是否可以自动删除长度为1的元素?使用
duplist 1]
仅保留具有多个匹配项的元素。您还可以按编号引用列表元素,因此
duplist[[1]]
26
。另外,
名称(duplist[1])
(注意,[])将是
“alan edd”
。谢谢。这会奏效的。我非常感谢你的回答和帮助。祝你今天愉快:)
lapply(1:6, function(x), ifelse((df$a & df$b) == (df$b & df$a), index(x), 0))
duplist <- split(1:nrow(df),apply(df,1,function(r) paste(sort(r),collapse=" ")))

duplist
$`alan edd`
[1] 2 6

$`alex david`
[1] 1

$`ben pete`
[1] 3 4

$`raymond richard`
[1] 5