使用dplyr'飞行;s filter()–;使用关系运算符

使用dplyr'飞行;s filter()–;使用关系运算符,r,filter,dplyr,conditional,relational,R,Filter,Dplyr,Conditional,Relational,我被卡住了。我如何使用两个关系运算符同时作为组内组内的过滤器 我得到了什么 数据 要与此过滤器结合 library(dplyr) tbl %>% group_by(id1, id2) %>% filter( (row_number() == n() & x > 2 ) ) #> # A tibble: 2 x 3 #> # Groups: id1, id2 [2] #> id1 id2 x #> <int

我被卡住了。我如何使用两个关系运算符同时作为组内组内的过滤器

我得到了什么 数据

要与此过滤器结合

library(dplyr)
tbl %>% group_by(id1, id2) %>%
   filter( (row_number() == n() & x >  2 ) )
#> # A tibble: 2 x 3
#> # Groups:   id1, id2 [2]
#>     id1   id2     x
#>   <int> <chr> <int>
#> 1     1  x_02     5
#> 2     2  x_03     6
tbl %>% group_by(id1, id2) %>%
   filter( (row_number() == 1 & x < -2 )  )
#> # A tibble: 1 x 3
#> # Groups:   id1, id2 [1]
#>     id1   id2     x
#>   <int> <chr> <int>
#> 1     1  x_02    -4
tbl%>%分组依据(id1,id2)%>%
过滤器((行数()==1&x<-2))
#>#A tible:1 x 3
#>#组:id1,id2[1]
#>id1 id2 x
#>     
#>1 x_02-4
像这样的,我想,但这并没有给我任何数据

tbl %>% group_by(id1, id2) %>%
   filter( (row_number() == n() & x >  2 ) &
           (row_number() == 1   & x < -2 )  )
tbl%>%分组依据(id1,id2)%>%
筛选器((行号()==n()&x>2)&
(行号()==1和x<-2))
这为什么不给我点帮助

我试图得到/期望的结果
#一个tible:2x3
#分组:id1,id2[1]
id1 id2 x
1 x_02-4
1 x_02 5

当一个组中两个条件都满足时,该组应该有两行,所以只需再次筛选
n()==2

tbl %>%
  filter((row_number() == n() & x > 2 ) | (row_number() == 1 & x < -2 )) %>%
  filter(n() == 2)

# A tibble: 2 x 3
# Groups: id1, id2 [1]
    # id1 id2       x
  # <int> <chr> <int>
# 1     1 x_02     -4
# 2     1 x_02      5
tbl%>%
过滤器((行号()==n()&x>2)|(行号()==1&x<-2))%>%
过滤器(n()==2)
#一个tibble:2x3
#分组:id1,id2[1]
#id1 id2 x
#   
#1 x_02-4
#2 1 x_02 5
请尝试其他选项(请参见备注):

tbl%>%
过滤器((行号()==n()&x>2)|(行号()==1&x<-2))%>%
过滤器(n()==2)%>%
不同的(id1,id2)%>%
左连接(,tbl,by=c(“id1”,“id2”))

当一个组中两个条件都满足时,该组应该有两行,所以只需再次筛选
n()==2

tbl %>%
  filter((row_number() == n() & x > 2 ) | (row_number() == 1 & x < -2 )) %>%
  filter(n() == 2)

# A tibble: 2 x 3
# Groups: id1, id2 [1]
    # id1 id2       x
  # <int> <chr> <int>
# 1     1 x_02     -4
# 2     1 x_02      5
tbl%>%
过滤器((行号()==n()&x>2)|(行号()==1&x<-2))%>%
过滤器(n()==2)
#一个tibble:2x3
#分组:id1,id2[1]
#id1 id2 x
#   
#1 x_02-4
#2 1 x_02 5
请尝试其他选项(请参见备注):

tbl%>%
过滤器((行号()==n()&x>2)|(行号()==1&x<-2))%>%
过滤器(n()==2)%>%
不同的(id1,id2)%>%
左连接(,tbl,by=c(“id1”,“id2”))

您能解释一下为什么示例中的条件与您提供的解释不符吗?例如,您说您希望在id1和id2中查找并查找从>-2开始到<2结束的x系列,但您的条件涉及到一个您没有提到的行号,与>-2语句相反:filter((row_number()==n()&x>2))。我看不出你提到的条件和你的预期结果之间有什么关系。@StewartRoss,谢谢你的提问。如果我理解,请更正调用
row\u number()==n()
为我提供了最后一行
n()
th,row,
row\u number()
内,
groupby()
。在这种情况下是
id1
id2
。然后我将其与条件相结合,
&
,即该特定的最后一行必须大于该行中的2,即
x>2
。这是我在数据之后的第一次调用中所做的。结果为
id11
1和2以及
id2
的调用是
x_02
x_03
,值为5和6。我希望这能回答你的问题?如果没有,请再次询问。可能看看我想要的结果。谢谢。您的代码要求在每个组中保留最后一行、第一行、x>2和x<2的每一行。(必须没有)但那不是你说的你想要的。我已经更新了我的文本(就在数据下面)。你说的一定没有。我不确定我是否同意。对于组
id1==1
内的案例
id2==x_02
有一系列
x
值,从
-4
开始,到
5
结束,这正是我想要提取的第一个和最后一个值。这就是我试图在我想要的结果中表现出来的。我想我可能错过了什么?请随时提出您认为可以澄清问题的任何编辑建议。您是否尝试过
筛选((row_number()==n()&x>2)|(row_number()==1&x<-2))
?您能否解释为什么示例中的条件与您提供的解释不匹配?例如,您说您希望在id1和id2中查找并查找从>-2开始到<2结束的x系列,但您的条件涉及到一个您没有提到的行号,与>-2语句相反:filter((row_number()==n()&x>2))。我看不出你提到的条件和你的预期结果之间有什么关系。@StewartRoss,谢谢你的提问。如果我理解,请更正调用
row\u number()==n()
为我提供了最后一行
n()
th,row,
row\u number()
内,
groupby()
。在这种情况下是
id1
id2
。然后我将其与条件相结合,
&
,即该特定的最后一行必须大于该行中的2,即
x>2
。这是我在数据之后的第一次调用中所做的。结果为
id11
1和2以及
id2
的调用是
x_02
x_03
,值为5和6。我希望这能回答你的问题?如果没有,请再次询问。可能看看我想要的结果。谢谢。您的代码要求在每个组中保留最后一行、第一行、x>2和x<2的每一行。(必须没有)但那不是你说的你想要的。我已经更新了我的文本(就在数据下面)。你说的一定没有。我不确定我是否同意。对于组
id1==1
内的案例
id2==x_02
有一系列
x
值,从
-4
开始,到
5
结束,这正是我想要提取的第一个和最后一个值。这就是我试图在我想要的结果中表现出来的。我想我可能错过了什么?请随意建议您认为可以澄清问题的任何编辑。您是否尝试过
过滤器((行号()==n()&x>2)|(行号()==1&x<-2))
tbl %>%
  filter((row_number() == n() & x > 2 ) | (row_number() == 1 & x < -2 )) %>%
  filter(n() == 2)

# A tibble: 2 x 3
# Groups: id1, id2 [1]
    # id1 id2       x
  # <int> <chr> <int>
# 1     1 x_02     -4
# 2     1 x_02      5
tbl %>%
  filter((row_number() == n() & x > 2 ) | (row_number() == 1 & x < -2 )) %>%
  filter(n() == 2) %>%
  distinct(id1, id2) %>%
  left_join(., tbl, by=c("id1", "id2"))