首页 > 解决方案 > base R:按两列聚合和求和

问题描述

我正在尝试使用聚合函数来实现与 SQL 查询相同的结果:

SQL:

sqldf(" SELECT
                PhotoID,
                UserID,
                SUM(Points) AS PhotoTotalPoints
            FROM Photos
            GROUP BY PhotoId, UserId")
116 186 rows.

R基地:

aggregate(x = Photos["Points"]
  , by = Photos[c("PhotoId","UserId")]
  , FUN = sum
)
114 950 rows.

使用 dplyr:

Photos %>%
    group_by(PhotoId,UserId) %>%
    summarise(sum = sum(Points)) 
116 186 rows.

我是 R 新手。尝试以多种方式解决它,但在文档中找不到任何解释。我错过了什么?

标签: sqlrdatabasedataframe

解决方案


这将是一种情况,其中NA一个分组列中有元素,如果有 NA,默认情况下aggregate会删除该行。为了防止这种情况,我们可以使用na.action = NULL

aggregate(Points~ PhotoId + UserId
    , FUN = sum, na.rm = TRUE,  na.action = NULL
   )

或者它可能是一些未使用的组合被丢弃的情况,drop = TRUE用于 data.frame 方法

aggregate(x = Photos["Points"]
   , by = Photos[c("PhotoId","UserId")]
   , FUN = sum, na.rm = TRUE, drop = FALSE
   )

推荐阅读