我有以下数据集:
group id date
G1 A 12/10/2007
G1 A 13/10/2007
G1 A 14/10/2007
G1 B 15/10/2007
G1 B 16/10/2007
G1 A 17/10/2007
G2 A 25/10/2007
G2 A 26/10/2007
G2 C 27/10/2007
G2 B 28/10/2007
G2 B 29/10/2007
G2 A 30/10/2007
我想添加一个新列,按组将 ID 转换为数字、有序形式(从 1 开始)。订单应按日期(在本例中,已订购)。输出将如下所示:
group id date id_new
G1 A 12/10/2007 1
G1 A 13/10/2007 1
G1 A 14/10/2007 1
G1 B 15/10/2007 2
G1 B 16/10/2007 2
G1 A 17/10/2007 1
G2 A 25/10/2007 1
G2 A 26/10/2007 1
G2 C 27/10/2007 2
G2 B 28/10/2007 3
G2 B 29/10/2007 3
G2 A 30/10/2007 1
所以,个体A(或另一个)在一个组中是“1”,在另一个组中是“2”是可以的;我只需要按首次到达(日期)编码
id_new
。我想这可以用 dplyr
来完成,但不确定如何......?我肯定会使用 group_by(group)
,但不确定之后使用哪个函数。
用于重现示例的数据集:
structure(c("G1", "G1", "G1", "G1", "G1", "G1", "G2", "G2", "G2",
"G2", "G2", "G2", "A", "A", "A", "B", "B", "A", "A", "A", "C",
"B", "B", "A", "12/10/2007", "13/10/2007", "14/10/2007", "15/10/2007",
"16/10/2007", "17/10/2007", "25/10/2007", "26/10/2007", "27/10/2007",
"28/10/2007", "29/10/2007", "30/10/2007", "1", "1", "1", "2",
"2", "1", "1", "1", "2", "3", "3", "1"), dim = c(12L, 4L), dimnames = list(
NULL, c("group", "id", "date", "id_new")))
您可以使用
forecats
包将 id
转换为因子,然后转换为整数。
df %>%
group_by(group) %>%
mutate(id_new = as.integer(forecats::fct_inorder(as.factor(id))))
# A tibble: 12 × 4
# Groups: group [2]
group id date id_new
<chr> <chr> <chr> <int>
1 G1 A 12/10/2007 1
2 G1 A 13/10/2007 1
3 G1 A 14/10/2007 1
4 G1 B 15/10/2007 2
5 G1 B 16/10/2007 2
6 G1 A 17/10/2007 1
7 G2 A 25/10/2007 1
8 G2 A 26/10/2007 1
9 G2 C 27/10/2007 2
10 G2 B 28/10/2007 3
11 G2 B 29/10/2007 3
12 G2 A 30/10/2007 1