在R中多个列滤波器值(Filter value in Multiple Columns in R)

2019-10-29 18:06发布

我试图在同一时间进行过滤(即来自一个循环)在多列根据矢量值的数据帧。

由于这发生在一个循环中,这里是相关步骤:

name.id = NamesList$`First Name` [i]

在上文中,我确定唯一行(名称),我想在这个循环中通过。

接下来,我想对筛选数据框我(作为test.df在这个例子中引用),其值在所有与“X”启动栏寻找(因为在真实的应用程序超过3)行,其中有针对性的名字出现在组“A”。

output.df = test.df %>% filter(grepl('A', Group) & (c(x1, x2, x3) %in% name.id))

例如,使用下面的示例数据,用于循环的第一遍,“JOE”将被识别并过滤名称。 我知道我可以创建一个长长的清单说X1%的%name.id,X2%的%name.id,但会有5+列,我知道有引用的列比这个过滤更优雅的方式。

样本数据:

x1 <- c('JOE','JOE','JOE','JOE', 'JOE', 'JOE', 'JOE', 'JOE', 'JOE', 'JOE', '','','','', 'FRED','FRED','FRED','FRED', 'FRED','FRED','JOE','JOE', 'FRED','FRED','JOE','JOE')

x2 <- c('ERIC','ERIC','ERIC','ERIC', 'ERIC', 'ERIC', 'ERIC', 'ERIC', 'ERIC', 'ERIC', '','','','', 'JOE','JOE','JOE','RON', 'RON','RON','RON','RON', 'RON','RON','FRED','FRED')

x3 <- c('SARAH','SARAH','SARAH','SARAH', 'SARAH', 'SARAH', 'SARAH', 'JOE', 'JOE', 'JOE', 'JOE','','','', 'JAY','JAY','JAY','JAY', 'JAY','JAY','JAY','JAY','JAY','','RON','RON')

State <- c('1','1','1','1', '1', '1', '1', '1', '1', '1', '2','2','2','2', '2','2','2','2', '2','2','2','2', '2','1','1','1')

Group <- c('A','A','A','B', 'B', 'B', 'A', 'B', 'A', 'B', 'A','A','A','B', 'A','A','A','B', 'NA','B','B','B', 'B', 'A','B','A')

test.df=cbind.data.frame(x1, x2, x3, State, Group)

Answer 1:

使用tidyverse

require(tidyverse)

dta <- data_frame(State, Group, x1, x2, x3)
dta %>% 
    gather(key = "key", value = "value", x1:x3) %>%
    filter(value %in% [condition to match])

所述gather功能移动三点x1x2x3为包含键-值对的两列。 然后,您可以在值列单独进行过滤。



文章来源: Filter value in Multiple Columns in R
标签: r dplyr