【问题标题】:Add column with counts of another, depending on another column [duplicate]添加具有另一个计数的列,具体取决于另一列[重复]
【发布时间】:2017-08-25 15:29:29
【问题描述】:

我的问题是这个问题的延伸:Create a column with a count of occurrences in R

以他们的例子为例,我想看看每个人拥有的每种产品的数量。

我有一个非常大的数据集,其结构如下:

df <- c(Contact.ID, Date.Time, Week, Attendance, WeeklyAT)

 Contact.ID       Date    Time    Week   Attendance  *WeeklyAT 
1   A       2012-10-06 18:54:48   44         30          *2
2   A       2012-10-08 20:50:18   44         30          *2
3   A       2013-05-24 20:18:44   21         30          *1
4   B       2012-11-15 16:58:15   46         40          *1 
5   B       2013-01-09 10:57:02    2         40          *3
6   B       2013-01-11 17:31:22    2         40          *3
7   B       2013-01-14 18:37:00    2         40          *3
8   C       2013-02-22 17:46:07    8         5           *1
9   C       2013-02-27 11:21:00    9         5           *1
10  D       2012-10-28 14:48:33   43         12          *1

我正在尝试查找 WeeklyAT 列,计算每个 ID 出现周数的频率(这是与另一个问题的区别,因为我没有查看每个 ID 的一般出现或周数)

我已经尝试了这两种方法以及它们的组合,但似乎找不到合适的方法:

df &lt;- transform(df, WeeklyAT = ave(seq(nrow(df)), Gym$Week, FUN=length))

df <- within(df, { WeeklyAT = ave(df$Week, df$Contact.ID, FUN = function(x) length(unique(x))) })

非常感谢任何帮助或提示 :) 非常感谢。

【问题讨论】:

  • ave(df$Week, df$Week, df$Contact.ID, FUN = length)
  • group_bytally 或在 dplyr 中查看 n
  • @d.b 非常感谢!

标签: r


【解决方案1】:

使用data.table,您可以执行以下操作:

library(data.table)
setDT(df)
merge(df, df[, WeeklyAT := .N, by = .(Contact.ID, Week)])

       Contact.ID       Date     Time Week Attendance X.WeeklyAT WeeklyAT
 1:          A 2012-10-06 18:54:48   44         30         *2        2
 2:          A 2012-10-08 20:50:18   44         30         *2        2
 3:          A 2013-05-24 20:18:44   21         30         *1        1
 4:          B 2012-11-15 16:58:15   46         40         *1        1
 5:          B 2013-01-09 10:57:02    2         40         *3        3
 6:          B 2013-01-11 17:31:22    2         40         *3        3
 7:          B 2013-01-14 18:37:00    2         40         *3        3
 8:          C 2013-02-22 17:46:07    8          5         *1        1
 9:          C 2013-02-27 11:21:00    9          5         *1        1
10:          D 2012-10-28 14:48:33   43         12         *1        1

编辑:

显然dplyr可以做一些非常相似的事情:

library(dplyr)
merge(df, 
      df %>% group_by(Contact.ID, Week) %>% summarise(WeeklyAT = n()))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-22
    • 1970-01-01
    • 2017-07-26
    • 1970-01-01
    • 2015-07-04
    • 2020-06-07
    相关资源
    最近更新 更多