使用R中的data.table通过多变量组生成递归ID
关于如何使用R中的使用R中的data.table通过多变量组生成递归ID,r,data.table,R,Data.table,关于如何使用R中的data.table包按组生成ID,我找到了几个选项,但没有一个完全适合我的问题。希望有人能帮忙 在我的问题中,我有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)
data.table
包按组生成ID,我找到了几个选项,但没有一个完全适合我的问题。希望有人能帮忙
在我的问题中,我有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:=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]
可能
为.integer
?哦,或者unclass
,这样效果很好!非常感谢。我知道它必须很简单,只是一个参考dt[,market\u new:=rleid(market),by=region]
也会产生相同的结果。
dt[, market_new := frankv(market, ties="dense"), by=region]