• R语言
  • 如何匹配两组数据再删除重复行

手头有两组病人的数据A和B,每个病人都有各自的ID number,数据列是每个病人的检测指标

请问各位大神如何用ID在A组里面找出所有B组里面的人,然后把他们从A组中完全删除掉?

举例来说,假如

A

ID 血脂级别 血压级别
1 100 50
2 200 55
3 300 60
4 400 65
5 500 70

B

ID 血糖级别 白血球数量
2 2000 99
4 3000 98
6 4000 97


如何才能把病人2和4从A里面找出来,然后完全删除,使A变成:

ID 血脂级别 血压级别
1 100 50
3 300 60
5 500 70

例如
> A <- data.frame(ID=1:5,X=rnorm(5))
> B <- data.frame(ID=c(2,4,6),X=rnorm(3))
> A[ !(A$ID %in% B$ID), ]
  ID          X
1  1 -0.7759557
3  3  0.2195803
5  5  0.7514204
已解决,谢过各位大神。

另外我不知道是不是我用的不对,setdiff为何用矩阵A的数据跟没用显示是一样的啊,
[未知用户]
因为不是那么用的(那个仅仅对vector适用),如果你的数据框重复的是完全相同的,这么做
## A/B: ID(key), X(Data)
#1. USE SQL
library(sqldf)
sqldf("select * from A except select * from B")
#2. use %in% should be the same as setdiff = !%in%
"["( 
   A, !(
        A$ID %in% B$ID)
   ,)
#3. Use data.table compare key only
library(data.table)
data.table(A, key="ID")[!data.table(B, key="ID")]
#4. dplyr
A %>% anti_join(B, by = "ID")