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中即可完美工作,谢谢!