【问题标题】:Filter value in Multiple Columns in R在 R 中的多列中过滤值
【发布时间】:2018-09-27 23:11:24
【问题描述】:

我正在尝试同时根据多列中的向量值(来自循环)过滤数据框。

由于这是循环进行的,因此相关步骤如下:

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 %in% name.id,x2 %in% 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)

【问题讨论】:

  • 我不明白你在做什么。您的示例不可重现。 name.id 是什么?请根据您的示例数据编辑您的帖子以包含可重复且最少的示例数据和预期输出。

标签: r dplyr


【解决方案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 移动到包含键值对的两列中。然后,您可以单独过滤值列。

【讨论】:

    猜你喜欢
    • 2020-10-08
    • 1970-01-01
    • 2020-11-06
    • 2021-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-24
    • 2018-07-08
    相关资源
    最近更新 更多