首页 > 解决方案 > 如何从 R 中长度不同的两个数据框中找到元素?

问题描述

我有两个宽度不同的矩阵。


Matrix_A
  'data.frame':412 obs. of  5 variables:
 $ R : num  2 18 18 2 2 18 18 2 2 2 ...
 $ NS: num  4.82e+09 4.82e+09 4.82e+09 4.82e+09 4.82e+09 ...
 $ NP: chr  "20000070000" "20000000090000" "20000000060000" "20000000010000" ...
 $ NG: chr  "TE" "EC" "ET" "HT" ...
 $ DC : logi  NA NA NA NA NA NA ...

Matrix_B

  'data.frame': 2687 obs. of  4 variables:
 $ R : num  18 2 2 2 18 2 2 2 18 2 ...
 $ NS : num  4.81e+09 4.81e+09 4.81e+09 4.81e+09 4.81e+09 ...
 $ NP :chr  "20000000000400" "2000000000600" "2000000001000" "20000000007000" ...
 $ NG: chr  "HT" "HT" "TT" "TY" ... 

我想知道矩阵 B 中存在矩阵 A 的哪些元素,为此我编写了这段代码。


Matrix_B$Results <- ifelse((Matrix_A$R %in% Matrix_B$R), 
                           ifelse((Matrix_A$NS %in% Matrix_B$NS),1,0))

这不会给我一个错误,但结果不正确。

我试过这个


Matrix_B$Results <- ifelse((Matrix_A$R %in% Matrix_B$R) & 
                        (Matrix_A$NS %in% Matrix_B$NS),1,0))

但不工作。

标签: r

解决方案


我想知道矩阵 B 中存在矩阵 A 的哪些元素

事实上,它是两个集合的减法:

A<-matrix( sample(1:5,12,replace = T ), 4, 3) 

 B<-matrix( sample(1:10,10,replace = T ), 2, 5)

因此,矩阵 A 和 B 可以是:

> A
     [,1] [,2] [,3]
[1,]    4    3    3
[2,]    2    1    5
[3,]    4    4    5
[4,]    1    4    4
> B
     [,1] [,2] [,3] [,4] [,5]
[1,]    4    3   10    8    9
[2,]    1   10   10    9    6

现在,如果您想知道两个矩阵中都有哪些元素,您有两个选择:

方法一:

intersect(B,A)

方法二:

existInANotB<-setdiff(A,B)
intersect<-setdiff(A,existInANotB)

推荐阅读