Ho il seguente problema, che probabilmente ha una soluzione molto semplice: Quando usodata.table DOVE PRIMA di
library (data.table)
actions = data.table(User_id = c("Carl","Carl","Carl","Lisa","Moe"),
category = c(1,1,2,2,1),
value= c(10,20,30,40,50))
User_id category value
1: Carl 1 10
2: Carl 1 20
3: Carl 2 30
4: Lisa 2 40
5: Moe 1 50
actions[category==1,sum(value),by= User_id]
Il problema è, che a quanto pare primi ordina fuori le righe in cui categoria è 1 e quindi usa il comando by. Quindi quello che ottengo è:
User_id V1
1: Carl 30
2: Moe 50
Ma quello che voglio è:
User_id V1
1: Carl 30
2: Lisa 0
3: Moe 50
Sto costruendo un data.table informazioni solo contenente circa gli utenti, quindi:
users = actions[,User_id,by= User_id]
users$value_one = actions[category==1,.(value_one =sum(value)),by= User_id]$value_one
che genera errori o include valori errati, quando ci sono utenti che non hanno voce.
si potrebbe usare 'azioni [, sum (IfElse (categoria == 1, valore, 0)), per = User_id] '. – nrussell
IIUC relativo a [FR # 788] (https://github.com/Rdatatable/data.table/issues/788) – MichaelChirico