在20年的时间里,我有大约200家美国公司的每日观察数据集。我想构建一个每天取值1-10的组变量,具体取决于例如公司的规模。我正在使用data.table和函数ntile(size,10)来创建组。
我试过
DT[,decile:=(ntile(size,10)),by=date]
但它不起作用。
DT
是我的data.table,其中包括变量date,size,price,companyid等
答案 0 :(得分:0)
这是一个简单的玩具示例: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]
答案 1 :(得分:0)
使用稍大的示例数据集,我可以构建一个组变量,如下所示:
# 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