使用dtplyr选择的组筛选器转换不正确

使用dtplyr选择的组筛选器转换不正确,r,dplyr,dtplyr,R,Dplyr,Dtplyr,使用dplyr可以轻松执行组筛选器选择。在下面的例子中,我们有一些公司今年不同季度的数据。我现在想过滤到第一季度没有第四季度数据的公司(在本例中是第二家公司),去掉季度标签 df% 滤器( 季度==1& !(季度百分比中的q%) ) %>% 选择(公司ID、, 年) >#A tible:1 x 3 >#集团:公司ID,股票代码[1] >公司年度 > > 1 2 2019 但是,对dtplyr执行相同操作会返回一个空表: dt% 滤器( 季度==1& !(季度百

使用dplyr可以轻松执行组筛选器选择。在下面的例子中,我们有一些公司今年不同季度的数据。我现在想过滤到第一季度没有第四季度数据的公司(在本例中是第二家公司),去掉季度标签

df%
滤器(
季度==1&
!(季度百分比中的q%)
) %>%
选择(公司ID、,
年)
>#A tible:1 x 3
>#集团:公司ID,股票代码[1]
>公司年度
>        
> 1         2  2019
但是,对dtplyr执行相同操作会返回一个空表:

dt%
滤器(
季度==1&
!(季度百分比中的q%)
) %>%
选择(公司ID)
年)
>来源:本地数据表[?×3]
>呼叫:`u DT1`[Quarter==1&!(q%在%Quarter中),(公司ID,
>年份)]
> 
> # ... 有3个变量:公司ID、年份
> 
>#使用as.data.table()/as.data.frame()/as_tible()访问结果
奇怪的是显示的翻译:

`u DT1`[季度==1&!(季度中的q%),
(公司名称,年份)]
这是不正确的。如dtplyr中所述,正确的呼叫需要使用过滤的
.SD

`u DT1`[,.SD[Quarter==1&!(q%在%Quarter中)],
by=(公司ID),
.SDcols=c(“年”)]
(by列将自动包括在内,因此
.SDcols
应省略它们以避免重复)

有趣的是,如果我们省略
选择
,翻译(因此输出)是正确的:

dt%>%
小组成员(
公司ID
) %>%
滤器(
季度==1&
!(季度百分比中的q%)
)
>来源:本地数据表[?x 4]
>调用:`_DT2`[,.SD[Quarter==1&!(q%在%Quarter中)],
>keyby=(公司ID)]
> 
>公司季度年度
>           
> 1         2       1  2019
因此,作为一种解决方法,我可以在选择
之前执行
as.data.table()
。这是可行的,但会引发一个恼人的警告:

dt%>%
小组成员(
公司ID
) %>%
滤器(
日历季度==1&
!(季度百分比中的q%)
) %>%
as.data.table()%>%
选择(公司ID、,
日历年)
>公司日历年
> 1:         2         2019
>警告信息:
>您正在raw data.table上使用dplyr方法,该方法将调用数据帧实现,
>而且很可能效率低下。
> * 
>*若要抑制此消息,请使用'lazy_dt()'生成data.table转换或转换
>*使用'as.data.frame()`/'as_-tibble()`/'as_-tibble()`。

我很难想象这是预期的行为,但在将其放到
dtplyr
Github跟踪器上之前,我想在这里检查一下。

这是
dtplyr
中当前的一个bug。我已经将它发布到了。

我不确定这里的预期行为是/应该是什么,但是如果在
select()
之前使用
ungroup()
,它在
dtplyr
示例中确实正常工作。当您确实需要显式执行
解组
时,我很困惑,因此无法告知这是否是我们应该期望的工作方式。@ravic我没有想到在查询中放入
解组
,因为我想不出分组干扰选择的任何概念性原因。