r - 在 R 中聚合

标签 r count aggregate-functions

我有一个包含两列的数据框。我想向数据集中添加额外的两列,其中包含基于聚合的计数。

df <- structure(list(ID = c(1045937900, 1045937900), 
SMS.Type = c("DF1", "WCB14"), 
SMS.Date = c("12/02/2015 19:51", "13/02/2015 08:38"), 
Reply.Date = c("", "13/02/2015 09:52")
), row.names = 4286:4287, class = "data.frame")

我想简单地计算没有空值的 SMS.Type 和 Reply.Date 实例的数量。所以在下面的玩具示例中,我将为 SMS.Type 生成 2,为 Reply.Date 生成 1

然后我想将它作为总计数添加到数据框中(我知道它们会复制原始数据集中的行数,但没关系)

我一直在玩聚合和计数功能,但无济于事
mytempdf <-aggregate(cbind(testtrain$SMS.Type,testtrain$Response.option)~testtrain$ID,
                  train, 
                  function(x) length(unique(which(!is.na(x)))))

mytempdf <- aggregate(testtrain$Reply.Date~testtrain$ID,
                  testtrain, 
                  function(x) length(which(!is.na(x))))

任何人都可以帮忙吗?

感谢您的时间

最佳答案

使用 data.table你可以这样做(我在你的原始数据中添加了一个真正的 NA)。
我也不确定您是否真的在寻找 length(unique())或只是 length ?

library(data.table)
cols <- c("SMS.Type", "Reply.Date")
setDT(df)[, paste0(cols, ".count") := 
                  lapply(.SD, function(x) length(unique(na.omit(x)))), 
                  .SDcols = cols, 
            by = ID]
#            ID SMS.Type         SMS.Date       Reply.Date SMS.Type.count Reply.Date.count
# 1: 1045937900      DF1 12/02/2015 19:51               NA              2                1
# 2: 1045937900    WCB14 13/02/2015 08:38 13/02/2015 09:52              2                1

在开发版本 (v >= 1.9.5) 中,您也可以使用 uniqueN功能

说明

这是一个通用解决方案,适用于任意数量的所需列。您需要做的就是将列名放入 cols .
  • lapply(.SD,正在对 .SDcols = cols 中指定的列调用某个函数
  • paste0(cols, ".count")添加 count 时创建新列名到 cols 中指定的列名
  • :=通过引用执行赋值,意思是用 lapply(.SD, 的输出更新新创建的列到位
  • by参数指定聚合器列
  • 关于r - 在 R 中聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30211704/

    相关文章:

    r - 在 Hortonworks Sandbox hadoop 2.3 上安装 R

    r - 基于列汇总变量的更快方法

    r - 使用 ggmap 按值绘制热图

    ios - 如何在 swift 中使用文本字段文本 "Amount"向表格 View 添加额外的行

    php - 仅当行少于 5 时才选择 MYSQL

    mysql - 使用连接、子查询和分组进行计数

    sql - 如何返回具有聚合列的连接表的第一个值

    oracle - ORA-00979 : not a GROUP BY expression (Case statement issue)

    r - Excel中的Openxlsx超链接输出显示

    sql - 如何选择某一列上具有最大值的行