创建组变量我每天观察约200美国公司过去20年间的数据集。我想构建每天一组变量取值1-10,这取决于例如公司的规模。我使用data.table和函数ntile(size,10)来创建组。随着时间的推移data.table
我试图
DT[,decile:=(ntile(size,10)),by=date]
,但没有奏效。 DT
是我data.table,其包括变量日期,大小,价格,companyid等
创建组变量我每天观察约200美国公司过去20年间的数据集。我想构建每天一组变量取值1-10,这取决于例如公司的规模。我使用data.table和函数ntile(size,10)来创建组。随着时间的推移data.table
我试图
DT[,decile:=(ntile(size,10)),by=date]
,但没有奏效。 DT
是我data.table,其包括变量日期,大小,价格,companyid等
这是一个简单的玩具例如:DT = data.table(name=c("A","A","A","A","B","B","B","B","C","C","C","C","D","D","D","D"), date=1:4, size=c(100, 101, 103, 102, 50, 51, 50 ,49, 200, 201, 202, 205, 95, 96, 98, 110)) DT[,decile:=(ntile(size,2)),by=date]
使用稍大示例数据集,我可以构建一组变量如下:
# sample data
DT = data.table(
firm= rep(LETTERS, each = 20),
date = 1:20,
size = sample(1:250, length(LETTERS) * 20, replace = TRUE))
# sort and assign group rank
setkey(DT, date, size)
DT[, grouprank := (1:.N) %/% 10L, by = date]
这将一个尺寸组等级分配给每个单独的日期每个企业,如可以从结果的单个日期的一个子集可以看出:
DT[date == 1]
firm date size grouprank
1: J 1 15 0
2: L 1 37 0
3: K 1 57 0
4: Q 1 64 0
5: R 1 64 0
6: C 1 81 0
7: E 1 86 0
8: I 1 106 0
9: O 1 117 0
10: B 1 118 1
11: X 1 119 1
12: A 1 135 1
13: H 1 138 1
14: D 1 140 1
15: F 1 162 1
16: N 1 171 1
17: M 1 178 1
18: S 1 178 1
19: T 1 181 1
20: G 1 188 2
21: Y 1 196 2
22: P 1 204 2
23: W 1 205 2
24: V 1 244 2
25: Z 1 245 2
26: U 1 247 2
firm date size grouprank
什么没有完全工作?结果不符合预期吗?有错误吗? – emilliman5
你能张贴一些样本数据吗? –
与一些模拟数据可再现例子将是有益的 – Megatron