根据两列R分配一个ID
Assign an ID based on two columns R
我有一些数据看起来像这样。我想通过电子邮件分配 '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
我不知道如何让 "counter" 在每次访问新电子邮件地址时都进行重置。我试过 data.table
和 ddply
但还是不太明白。
你可以试试:
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))
我有一些数据看起来像这样。我想通过电子邮件分配 '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
我不知道如何让 "counter" 在每次访问新电子邮件地址时都进行重置。我试过 data.table
和 ddply
但还是不太明白。
你可以试试:
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))