R - 比较列表和标记匹配

时间:2015-02-04 16:41:59

标签: r list loops if-statement match

我有2个列表,我需要识别并标记列表1和列表2之间匹配的位置。

示例:

List 1  List 2
   1      1
   2      2
   3      3
   4      4
   5      5
   6    
   7    
   8    
   9    
  10    

期望的输出:

List 1  Match
  1       Y
  2       Y
  3       Y
  4       Y
  5       Y
  6       N
  7       N
  8       N
  9       N
  10      N

我尝试了一个包含在循环中的if语句的组合,但是无论匹配如何都只产生否定结果。任何帮助将非常感激!

我目前的做法:

for(x in 1:List1)) 

{

  if(List1[x] %in% List2 == TRUE) {
    List1$Match <- 'Yes'
  }else{
    List1$Match <- 'No'
  }

}  

所以我需要将TRUE或FALSE追加到List 1

    > List1 %in% List2==TRUE
 [1]  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE

这个技巧可以用Y和N代替true false:

List1$Match <- List1 %in% List2==TRUE

2 个答案:

答案 0 :(得分:2)

list1 <- c( 1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
list2 <- c( 1, 2, 3, 4, 5)

result1 <- list1 %in% list2

result1 <- gsub("TRUE", "Y", result1)  
result1 <- gsub("FALSE", "N", result1) 

答案 1 :(得分:2)

无需使用gsub两次,您只需使用索引

即可
List1 <- 1:10
List2 <- 1:5

c("N", "Y")[(List1 %in% List2) + 1]
## [1] "Y" "Y" "Y" "Y" "Y" "N" "N" "N" "N" "N"

甚至更简单

ifelse(List1 %in% List2, "Y", "N")
# [1] "Y" "Y" "Y" "Y" "Y" "N" "N" "N" "N" "N"