R 根据另一列添加计数为另一列的列

R 根据另一列添加计数为另一列的列,r,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

我的问题是这个问题的延伸:

以他们为例,我想看看每个人拥有多少种产品

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

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

df使用
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()))

ave(df$Week,df$Week,df$Contact.ID,FUN=length)
请参见
groupby
tally
或只需
n
dplyr
@d.b中即可完美工作,谢谢!