2017-02-21 2 views
0

У меня есть набор ежедневных наблюдений для около 200 американских фирм за двадцать лет. Я хочу построить групповую переменную, принимающую значения 1-10 каждый день, в зависимости от размера фирмы. Я использую data.table и функцию ntile (размер, 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 
Смежные вопросы