我有一些看起来像这样的数据。我想分配一个' ID'通过电子邮件和wk_id。
row_num email wk_id
1 aaaa 1/4/15
2 aaaa 1/11/15
3 aaaa 1/25/15
4 bbbb 6/29/14
5 bbbb 9/7/14
6 cccc 11/16/14
7 cccc 11/30/14
8 cccc 12/7/14
9 cccc 12/14/14
10 cccc 12/21/14
11 cccc 12/28/14
12 cccc 1/4/15
13 cccc 1/25/15
我希望数据看起来像这样。
row_num email wk_id ID
1 aaaa 1/4/15 1
2 aaaa 1/11/15 2
3 aaaa 1/25/15 3
4 bbbb 6/29/14 1
5 bbbb 9/7/14 2
6 cccc 11/16/14 1
7 cccc 11/30/14 2
8 cccc 12/7/14 3
9 cccc 12/14/14 4
10 cccc 12/21/14 5
11 cccc 12/28/14 6
12 cccc 1/4/15 7
13 cccc 1/25/15 8
我无法弄清楚如何获得"计数器"每次点击新的电子邮件地址时重置。我已经尝试data.table
和ddply
,但仍然无法获得它。
答案 0 :(得分:3)
你可以尝试:
library(dplyr)
df %>%
group_by(email) %>%
mutate(ID = row_number())
给出了:
#Source: local data frame [13 x 4]
#Groups: email
#
# row_num email wk_id ID
#1 1 aaaa 1/4/15 1
#2 2 aaaa 1/11/15 2
#3 3 aaaa 1/25/15 3
#4 4 bbbb 6/29/14 1
#5 5 bbbb 9/7/14 2
#6 6 cccc 11/16/14 1
#7 7 cccc 11/30/14 2
#8 8 cccc 12/7/14 3
#9 9 cccc 12/14/14 4
#10 10 cccc 12/21/14 5
#11 11 cccc 12/28/14 6
#12 12 cccc 1/4/15 7
#13 13 cccc 1/25/15 8
或使用data.table
library(data.table)
setDT(df)[, ID:= 1:.N, email]
ave
来自base R
df$ID <- with(df, ave(row_num, email, FUN=seq_along))