为什么dplyr折叠我的整个数据框而不进行分组

时间:2018-10-02 22:17:19

标签: r dplyr

我已经研究了一段时间,但似乎找不到问题。我经常使用dplyr,但突然之间,我从group_by / summarise组合中得到了奇怪的输出。

我的数据集很大,我正在尝试使用以下方法对其进行总结:

dataAgg <- dataRed %>% group_by(ClmNbr, SnapshotDay, Pre2016) %>%
  filter(SnapshotDay == '30'| SnapshotDay == '90') %>%
  summarise(
    NumFeat = sum(FeatureNbr),
    TotInc = sum(IncSnapshotDay),
    TotDelta = sum(InctoFinal),
    TotPaid = sum(FinalPaid)
  )

数据框的设置如下:

'data.frame':   123819 obs. of  8 variables:
 $ ClmNbr        : Factor w/ 33617 levels "14-00765132",..: 2162 2163 2163 2164 1842 2287 27 27 27 28 ...
 $ SnapshotDay   : Factor w/ 3 levels "7","30","90": 1 1 1 1 1 1 1 1 1 1 ...
 $ Pre2016       : Factor w/ 2 levels "Post2016","Pre2016": 2 2 2 2 2 2 2 2 2 2 ...
 $ FeatureNbr    : int  6 2 3 3 6 2 4 5 6 5 ...
 $ IncSnapshotDay: num  5000 77 5000 4500 77 2200 1800 1100 1800 25000 ...
 $ FinalPaid     : num  442 0 15000 5000 0 ...
 $ InctoFinal    : num  -4558 -77 10000 500 -77 ...
 $ TimeDelta     : num  25.833 2.833 2.833 0.833 1.833 ...

执行代码时,我得到1分。 4个变量;没有应用分组。

'data.frame':   1 obs. of  4 variables:
 $ NumFeat : int 287071
 $ TotInc  : num NA
 $ TotDelta: num NA
 $ TotPaid : num 924636433

我过去经常这样做,没有问题。

我可以使用聚合,但有时,我会基于列来混合和匹配函数,因此它并不总是有效。

我在做什么错了?

1 个答案:

答案 0 :(得分:1)

因此,经过一些研究和实验,库加载的顺序很重要。原始顺序如下:

library(RODBC)
library(dplyr)
library(DT)
library(reshape2)
library(ggplot2)
library(scales)
library(caret)
library(markovchain)
library(knitr)
library(Metrics)
library(RColorBrewer)

但是,ggplot2将plyr作为依赖项加载,因此,为了使此工作更顺利,应修改顺序以最后加载dplyr。这是我过去要做的。

library(RODBC)
library(DT)
library(reshape2)
library(ggplot2)
library(scales)
library(caret)
library(markovchain)
library(knitr)
library(Metrics)
library(RColorBrewer)
library(dplyr)

或者,如在Python中一样,可以通过指定执行命令的库来完成。在Python中,我们使用以下语法导入库:

import numpy as np

然后像numpy commmands一样使用np.引用任何np.array(),R语法如下library::

在命令中添加dplyr::可以解决以下问题。

dataAgg <- dataRed %>% dplyr::group_by(ClmNbr, SnapshotDay, Pre2016) %>%
  dplyr::filter(SnapshotDay == '30'| SnapshotDay == '90') %>%
  dplyr::summarise(
    NumFeat = sum(FeatureNbr),
    TotInc = sum(IncSnapshotDay),
    TotDelta = sum(InctoFinal),
    TotPaid = sum(FinalPaid)
  )