比较两列组成的组并返回索引匹配项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