在数据框中保留具有特定值的行并删除所有其他行[R]

Roc*_*cer 5 r rows

我正在使用R.

set.seed(1)
Data <- data.frame(id = seq(1, 10), 
               Diag1 = sample(c("A123", "B123", "C123"), 10, replace = TRUE), 
               Diag2 = sample(c("D123", "E123", "F123"), 10, replace = TRUE), 
               Diag3 = sample(c("G123", "H123", "I123"), 10, replace = TRUE), 
               Diag4 = sample(c("A123", "B123", "C123"), 10, replace = TRUE), 
               Diag5 = sample(c("J123", "K123", "L123"), 10, replace = TRUE), 
               Diag6 = sample(c("M123", "N123", "O123"), 10, replace = TRUE), 
               Diag7 = sample(c("P123", "Q123", "R123"), 10, replace = TRUE))
Data
Run Code Online (Sandbox Code Playgroud)

我有这样的数据框架.实际上它有34个变量和1.5 Mio观测值.它是一个包含患者数据的数据框.(ID和诊断(ICD10)A123和B123代表某些诊断.我想提取所有患有这些诊断的患者.实际上我正在寻找不同ICD10诊断的100个内的6个诊断.我寻找的每个诊断都可以是出现在任何列中,但它们是相互排斥的.最后,我将有一个大约4000个观测值的数据帧,而不是1.5兆欧.

我的目标是获得一个数据框,我只保留包含A123或B123的行.A123和B123不能在同一行.但它们可以出现在每一栏中.

当我这样做时,我设法为一个变量执行此操作:

DataA123 <- Data[Data$Diag1 == "A123", ]
Run Code Online (Sandbox Code Playgroud)

但我想为每个变量和A123和B123(实际上有6个这样的因素)一起做.

这可能吗?

ROL*_*OLO 5

这个怎么样?

选择A123和/或B123的所有行:

Data[apply(Data,1,function(x) {any(c("A123", "B123") %in% x)}),]
Run Code Online (Sandbox Code Playgroud)

选择A123或B123的所有行:

Data[apply(Data,1,function(x) {Reduce(xor, c("A123", "B123") %in% x)}),]
Run Code Online (Sandbox Code Playgroud)