2017-02-21 96 views
0

创建组变量我每天观察约200美国公司过去20年间的数据集。我想构建每天一组变量取值1-10,这取决于例如公司的规模。我使用data.table和函数ntile(size,10)来创建组。随着时间的推移data.table

我试图

DT[,decile:=(ntile(size,10)),by=date] 

,但没有奏效。 DT是我data.table,其包括变量日期,大小,价格,companyid等

+0

什么没有完全工作?结果不符合预期吗?有错误吗? – emilliman5

+0

你能张贴一些样本数据吗? –

+1

与一些模拟数据可再现例子将是有益的 – Megatron

回答

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]

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 
相关问题