Sto cercando di fare: = per gruppo per una colonna esistente di tipo 'intero' dove i nuovi valori sono di tipo 'double', che fallisce.Come modificare il tipo di colonna di destinazione quando si esegue: = per gruppo in un data.table in R?
Il mio scenario sta mutando una colonna che rappresenta il tempo in un POSIXct in base ai valori in altre colonne. Potrei modificare la creazione di data.table come un aggiramento, ma sono ancora interessato a come procedere cambiando effettivamente il tipo di una colonna, come suggerito nel messaggio di errore.
Ecco un semplice esempio giocattolo del mio problema:
db = data.table(id=rep(1:2, each=5), x=1:10, y=runif(10))
db
id x y
1: 1 1 0.47154470
2: 1 2 0.03325867
3: 1 3 0.56784494
4: 1 4 0.47936031
5: 1 5 0.96318208
6: 2 6 0.83257416
7: 2 7 0.10659533
8: 2 8 0.23103810
9: 2 9 0.02900567
10: 2 10 0.38346531
db[, x:=mean(y), by=id]
Error in `[.data.table`(db, , `:=`(x, mean(y)), by = id) :
Type of RHS ('double') must match LHS ('integer'). To check and coerce would impact performance too much for the fastest cases. Either change the type of the target column, or coerce the RHS of := yourself (e.g. by using 1L instead of 1)
Amore la risposta veloce! Completamente dimenticato di cambiare ... per quanto riguarda il secondo suggerimento, usare 'x1' nei setnames sarebbe forse ancora più ordinato? Cioè setnames (db [, x1: = mean (y), per = id] [, x: = NULL], 'x1', 'x') – hallvig
Haha lo farò - devo solo aspettare qualche altro minuto ;-) – hallvig
@hallvig Grazie – akrun