【问题标题】:How to aggregate data.table by applying two functions [duplicate]如何通过应用两个函数来聚合 data.table [重复]
【发布时间】:2016-11-10 17:01:15
【问题描述】:

我有一个 data.table,其中列出了用户 ID、周数、用户做了某事的事实(已处理,0 或 1)和一个我只是用来计算我有多少值的列,称为 HowMany :

 data <- data.table(WeekNumber=c(33,33,33,34,34,33,33,34,34), 
         User=c(1,1,1,1,1,2,2,2,2), 
         Processed=c(1,1,0,0,1,0,1,0,1),
         HowMany=c(1,1,1,1,1,1,1,1,1))

我想找出每周完成和未完成的事情的总和,所以我做了这样的事情:

> dcast(setDT(data), WeekNumber~Processed, value.var="HowMany", sum) 
   WeekNumber 0 1
1:         33 2 3
2:         34 2 2

现在我想找出每周完成和未完成的事情的平均数量,所以在这种情况下,我之前还必须按用户进行汇总,但我在这一步失败了:

> dcast(setDT(data), WeekNumber~Processed+User, value.var="HowMany", mean) 
  WeekNumber 0_1 0_2 1_1 1_2
1:        33   1   1   1   1
2:        34   1   1   1   1

而我的最佳结果是:

WeekNumber 0   1
        33 1 1.5
        34 1   1

【问题讨论】:

  • 好的,你想要的输出来自table,比如data[, table(WeekNumber, Processed)/uniqueN(WeekNumber)]
  • @Frank 谢谢,你会写这个作为答案让我接受吗?
  • 也许它可以作为一个旧问题的欺骗而被关闭,而不是像stackoverflow.com/q/25293045
  • 我不明白为什么它因为不清楚而被搁置? @Frank 你正确回答了我编辑的问题......你仍然认为它不清楚吗?
  • 不,我认为现在还不清楚。我收回了我的投票,但无法重新投票以将其关闭(因为我不能投票两次)。

标签: r data.table reshape2 dcast


【解决方案1】:

这样的事情怎么样:

dat[, user_processed := paste(User, Processed, sep="_")]
dcast(dat, WeekNumber~user_processed, value.var="Processed", length) 

这给了你:

   WeekNumber 10001041_1 10001042_0 10001042_1
1:         33          0          3          2
2:         43          5          0          0

使用的样本数据:

dat <- fread("User Processed WeekNumber
  1: 10001042         0         33
      2: 10001042         0         33
      3: 10001042         1         33
      4: 10001042         0         33
      5: 10001042         1         33
      870: 10001041         1         43
      871: 10001041         1         43
      872: 10001041         1         43
      873: 10001041         1         43
      874: 10001041         1         43")

dat <- dat[, V1 := NULL]
setnames(dat, c("User", "Processed", "WeekNumber"))

【讨论】:

  • 很抱歉,您能否指出问题中要求的平均值在哪里计算?
  • @user299791 你的问题很模糊。在 R 标签中,与 SO 上的其他地方一样,您应该发布一个带有相应输出的最小可重现示例。 stackoverflow.com/questions/5963269/…
  • @user299791 您可以使用mean 而不是length,但我认为基本上一切都可以产生预期的输出......作为弗兰克,我不是100%确定你的期望。跨度>
  • 我已经重写了这个问题,希望我的观点现在更清楚了
猜你喜欢
  • 2019-09-09
  • 2014-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-16
  • 2011-08-30
相关资源
最近更新 更多