在 R 中使用 data.table 通过多变量组生成递归 ID
Generating recursive ID by muli-variate group using data.table in R
我找到了几个关于如何使用 R 中的 data.table
包按组生成 ID 的选项,但其中 none 完全符合我的问题。希望有人能提供帮助。
在我的问题中,我有 160 个市场,属于一个国家/地区的 21 个地区。这些市场编号为 1:160,每个市场中可能记录了多个观察结果。我想重组我的市场 ID 变量,使其代表每个地区内的独特市场,并在每个新地区重新开始计数。
下面是一些代码来表示我的问题:
require(data.table)
dt <- data.table(region = c(1,1,1,1,2,2,2,2,3,3,3,3),
market = c(1,1,2,2,3,3,4,4,5,6,7,7))
> dt
region market
1: 1 1
2: 1 1
3: 1 2
4: 1 2
5: 2 3
6: 2 3
7: 2 4
8: 2 4
9: 3 5
10: 3 6
11: 3 7
12: 3 7
目前,我的数据设置为表示
的结果
dt[, market_new := .GRP, by = .(region, market)]
但我想要的是
region market market_new
1: 1 1 1
2: 1 1 1
3: 1 2 2
4: 1 2 2
5: 2 3 1
6: 2 3 1
7: 2 4 2
8: 2 4 2
9: 3 5 1
10: 3 6 2
11: 3 7 3
12: 3 7 3
这好像return你想要的
dt[, market_new:=as.numeric(factor(market)), by=region]
这里我们按地区划分数据,然后通过factor()
函数为每个地区的每个市场赋予唯一ID,并提取基础数字索引。
从 1.9.5+
开始,您可以将 frank()
(或 frankv()
)与 ties.method = "dense"
一起使用,如下所示:
dt[, market_new := frankv(market, ties="dense"), by=region]
我找到了几个关于如何使用 R 中的 data.table
包按组生成 ID 的选项,但其中 none 完全符合我的问题。希望有人能提供帮助。
在我的问题中,我有 160 个市场,属于一个国家/地区的 21 个地区。这些市场编号为 1:160,每个市场中可能记录了多个观察结果。我想重组我的市场 ID 变量,使其代表每个地区内的独特市场,并在每个新地区重新开始计数。
下面是一些代码来表示我的问题:
require(data.table)
dt <- data.table(region = c(1,1,1,1,2,2,2,2,3,3,3,3),
market = c(1,1,2,2,3,3,4,4,5,6,7,7))
> dt
region market
1: 1 1
2: 1 1
3: 1 2
4: 1 2
5: 2 3
6: 2 3
7: 2 4
8: 2 4
9: 3 5
10: 3 6
11: 3 7
12: 3 7
目前,我的数据设置为表示
的结果dt[, market_new := .GRP, by = .(region, market)]
但我想要的是
region market market_new
1: 1 1 1
2: 1 1 1
3: 1 2 2
4: 1 2 2
5: 2 3 1
6: 2 3 1
7: 2 4 2
8: 2 4 2
9: 3 5 1
10: 3 6 2
11: 3 7 3
12: 3 7 3
这好像return你想要的
dt[, market_new:=as.numeric(factor(market)), by=region]
这里我们按地区划分数据,然后通过factor()
函数为每个地区的每个市场赋予唯一ID,并提取基础数字索引。
从 1.9.5+
开始,您可以将 frank()
(或 frankv()
)与 ties.method = "dense"
一起使用,如下所示:
dt[, market_new := frankv(market, ties="dense"), by=region]