r - 在 R 中的多列中过滤值
问题描述
我正在尝试同时根据多列中的向量值(来自循环)过滤数据框。
由于这是循环进行的,因此以下是相关步骤:
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)
解决方案
使用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
函数将三列x1
,x2
移动x3
到包含键值对的两列中。然后,您可以单独过滤值列。
推荐阅读
- ruby-on-rails - Rails - 使用下拉和多选创建具有三重连接的表单
- java - 从日期中添加和减去天数
- vba - 为什么一些 SELECT 语句打开一个 RecordSet,而另一些则返回“错误 13,类型不匹配”
- python - 如何同时发送和接收消息 python sockets
- c# - 远程服务器给 Oracle 一个无效月份错误
- php - 锚标记不是可点击的 HTML
- python - 设置 autoretry_for 时,基于芹菜类的任务不会重试
- html - 在移动设备上使图标成行显示
- aframe - 在 oculus go 或其他控制器上制作事件(悬停、单击)
- ios - Flutter 和 IOS 应用发布前的开发和测试