匹配两组数字组合

时间:2018-02-22 02:35:46

标签: r

我有以下数据框:

T1 T2 T3 R1 R2 R3
3  4  2  3  2  1
6  4  2  2  1  4
8  7  6  6  7  8

我试图将第一组数字(T1,T2,T3)的组合与第二组(R1,R2,R3)相匹配,以查看是否存在匹配。

例如:

线路1:

T1,T2,T3的第一部分中的数字是3,4,2

R1,R2,R3的第二部分中的数字是3,2,1

所以这里没有匹配。

Line2(也不匹配)

行3: T1,T2,T3的第一部分中的数字是8,7,6

R1,R2,R3的第二部分中的数字是6,7,8

这里有匹配,因为两个部分都存在所有三个数字(顺序无关紧要)。

期望的输出:

T1 T2 T3 R1 R2 R3  MATCH
3  4  2  3  2  1   No Match
6  4  2  2  1  4   No Match
8  7  6  6  7  8   Match

到目前为止,我已尝试使用match并将每种组合合并,但我被卡住了。

2 个答案:

答案 0 :(得分:3)

如果前三列中的所有元素都存在于最后三行中,我们可以使用Person来检查每一行(MARGIN = 1)。在apply中使用此选项可获取所需的字符串。

ifelse

答案 1 :(得分:1)

选项是将applyMARGIN = 1一起使用,然后将前3个元素与接下来的3个元素进行比较,并将其与all

包装在一起
c("No Match", "Match")[apply(df1, 1, function(x) all(sort(x[1:3]) == sort(x[4:6]))) + 1]
#[1] "No Match" "No Match" "Match"  

或另一个选项是tidyverse

library(tidyverse)
rownames_to_column(df1, 'rn') %>%
     gather(key, val, -rn) %>% 
     group_by(rn) %>% 
     summarise(MATCH = all(sort(val[str_detect(key, "^T")]) == 
                           sort(val[str_detect(key, "^R")]))) %>%
     pull(MATCH) %>% 
     bind_cols(df1, MATCH = .)

注意:最好保持逻辑(TRUE / FALSE)而不是Match/No Match