Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
条件IF按dplyr中的组过滤多个条件_R_Dplyr - Fatal编程技术网

条件IF按dplyr中的组过滤多个条件

条件IF按dplyr中的组过滤多个条件,r,dplyr,R,Dplyr,因此,我有大量的数据集,但需要实现一个复杂的数据过滤系统。我想我可以使用dplyr和group_by,但是我遇到了一个难题,那就是如何在组中实现IF语句 下面是我尝试过并认为有效的方法,但我认为索引可能会有问题,因此每个组会得到多个TRUE/FALSE。我不知道我会如何索引,虽然在每个小组 例如在下面的例子中, 如果组GP包含字符串“a”,则保留Var4等于J或J1的任何记录(对于包含字母“J”的记录,我可以这样做),但如果组GP包含字符串“b”,并且还包含字符串“2”(这里是一个简单的数字,但

因此,我有大量的数据集,但需要实现一个复杂的数据过滤系统。我想我可以使用dplyr和group_by,但是我遇到了一个难题,那就是如何在组中实现IF语句

下面是我尝试过并认为有效的方法,但我认为索引可能会有问题,因此每个组会得到多个TRUE/FALSE。我不知道我会如何索引,虽然在每个小组

例如在下面的例子中, 如果组GP包含字符串“a”,则保留Var4等于J或J1的任何记录(对于包含字母“J”的记录,我可以这样做),但如果组GP包含字符串“b”,并且还包含字符串“2”(这里是一个简单的数字,但实际上它是字符串和数字的组合),然后在Var4 if“J”的位置保留记录,但如果组GP包含字符串“b”且也包含字符串“3”,则在Var4 if“U”的位置保留记录……在本例中有一些情况,但最终我给出了我需要应用的规则,我将有300多条规则“如果组具有这些品质,则保留这些记录”

我需要它能够根据应用于三个变量的条件有条件地过滤掉大量的数据。例如,我需要,对于三个变量的每个单独的唯一组(例如,如果将a视为最后一组,则为b-3-b),保留符合结果的记录(例如“U”),但仅当满足某些条件(例如“GP”)包含字符串“b”和字符串“3”)。但我必须对300个不同的组执行此操作,这些组有时有复杂的IF语句(例如,对于GP,如果“GP”包含某些字符串“EG”,则在第四个变量中保留结果为“U”的记录,但如果它包含字符串“RT”,则在第四个变量中保留结果为“J”的记录

多谢各位。
Sab

我希望您可以结合某些条件,减少一些重复的键入

对于给定的示例,我们可以使用
grepl
语句与
&
|
运算符的组合来包括各种条件的组合。希望您能够根据自己的需求进一步扩展此组合

library(dplyr)

testing %>%
  filter(grepl("a", GP) & grepl("J|J1", var4) | 
         grepl("b", GP) & grepl("2", GP) & grepl("J", var4) |
         grepl("b", GP) & grepl("3", GP) & grepl("U", var4))


#  var1   var2 var3  var4  GP   
# <fct>  <dbl> <fct> <fct> <chr>
#1 a         1 A     J     a-1-A
#2 b         2 A     J     b-2-A
#3 a         1 B     J1    a-1-B
#4 b         3 B     U     b-3-B

在你的第一篇文章中做得很好。我建议在代码之外单独描述你的情况,这样人们就不必猜测你需要什么。你的尝试可能与你实际需要的大不相同,并将人们引向错误的方向。你能用语言描述一下你正在尝试做什么吗?另外,
测试$wierdID
是一种缺失ng。@markus,谢谢,我已经更新了代码。这是我的“GP”变量在原始数据集中被调用的地方。@Shree我需要它能够根据应用于三个变量的条件有条件地过滤掉大量数据。例如,我需要,对于三个变量(例如b-3-b)的每个单独的唯一组保留记录(s) 这将符合结果(例如“U”),但仅当满足某些条件时(例如,“GP”包含字符串“b”和字符串“3”)@SabP只需在你的原始帖子中列出你的条件。这样你会更快地得到帮助。如果太多,那么至少列出一些,并描述模式(如果有的话)。谢谢你,但条件会根据前三个变量的独特组合的集合而变化;因此,我尝试将此应用于团队_by@SabP但是如果你的条件遵循相同的模式。您是否可以将它们一个添加到另一个下面,如示例中的3个所示?最终,您需要过滤行,而不考虑组,对吗?至少组在示例中不起任何作用。谢谢。我需要重新检查提供给我的条件;因为它们是基于组提供给我的例如,如果在Var1:3的每组中,如果Var1==X1,并且Var4列出的可能性是Z1或Z2,则保留Z2,但如果它们是Z1或Z3,则保留Z1。我的猜测是,条件将根据Var1-var3组合而变化,因为它们是这样给我的。我验证了,这取决于每组Var4的选项/选择。对于对于大多数组,您提供的上述简化代码都会起作用,因为对于特定的var1,它在var4中始终是相同的选项组合,但并不总是如此。例如,在我上面的示例中,这里选择了一种形式的J选项,但如果对于var1:3的组合,存在比J更好的选项,那么我应该获取该选项,而不是J。
  var1 var2 var3 var4    GP
1    a    1    A    U a-1-A
3    b    2    A    J b-2-A
6    a    1    B   J1 a-1-B
7    b    3    B    U b-3-B
library(dplyr)

testing %>%
  filter(grepl("a", GP) & grepl("J|J1", var4) | 
         grepl("b", GP) & grepl("2", GP) & grepl("J", var4) |
         grepl("b", GP) & grepl("3", GP) & grepl("U", var4))


#  var1   var2 var3  var4  GP   
# <fct>  <dbl> <fct> <fct> <chr>
#1 a         1 A     J     a-1-A
#2 b         2 A     J     b-2-A
#3 a         1 B     J1    a-1-B
#4 b         3 B     U     b-3-B
testing[with(testing,grepl("a", GP) & grepl("J|J1", var4) | 
                     grepl("b", GP) & grepl("2", GP) & grepl("J", var4) |
                     grepl("b", GP) & grepl("3", GP) & grepl("U", var4)), ]