【发布时间】:2017-05-23 10:56:41
【问题描述】:
非常感谢您的阅读。抱歉,我确信这是一项简单的任务。
我有一个数据框: (已编辑:添加了不包含在比较中的额外列)
b = c(5, 6, 7, 8, 10, 11)
c = c('david','alan','pete', 'ben', 'richard', 'edd')
d = c('alex','edd','ben','pete','raymond', 'alan')
df = data.frame(b, c, d)
df
b c d
1 5 david alex
2 6 alan edd
3 7 pete ben
4 8 ben pete
5 10 richard raymond
6 11 edd alan
我想将c 和d 列组与d 和c 列组进行比较。也就是说,对于一行,我想将 c 和 d 中的组合值与所有其他行的 d 和 c 中的组合值进行比较。
(注意值可以是字符或整数)
在这些匹配的地方,我想返回匹配的那些行的索引,最好是作为列表的列表。我需要能够访问索引而不参考列 c 或 d 中的值。
即对于上述数据框,我的预期输出是:
c(c(2, 6), c(3, 4))
((2,6), (3,4))
作为:
Row 2: (c + d == alan + edd) = row 6: (d + c == edd + alan)
Row 3: (c + d == pete + ben) = row 4: (d + c == ben + pete)
我了解如何使用 match melt 确定两个单独列的匹配情况,但如果将它们连接在一起并遍历所有可能的行组合,则不会。
我的设想是这样的:
lapply(1:6, function(x), ifelse((df$a & df$b) == (df$b & df$a), index(x), 0))
但显然这是不正确的,不会起作用。
我咨询了以下问题,但无法给出答案。我不知道从哪里开始。
Matching multiple columns on different data frames and getting other column as result
match two columns with two other columns
Comparing two columns in a data frame across many rows
R Comparing each value of all pairs of columns
我怎样才能实现上述目标?
【问题讨论】: