Próbuję zrobić: = przez grupę dla istniejącej kolumny typu "integer", gdzie nowe wartości są typu "double", co nie powiedzie się.Jak zmienić typ kolumny docelowej podczas wykonywania: = według grupy w tabeli data.table w R?
Mój scenariusz polega na mutowaniu kolumny przedstawiającej czas na POSIXct na podstawie wartości w innych kolumnach. Mógłbym zmodyfikować tworzenie pliku data.table jako obejście, ale nadal interesuje mnie, jak właściwie zmienić typ kolumny, jak sugeruje komunikat o błędzie.
Oto prosty przykład zabawka mojego problemu:
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)
Uwielbiam szybką reakcję! Całkowicie zapomniałeś o zmianie ... odnośnie drugiej sugestii, użycie "x1" w nazwach byłoby być może nawet starsze? To znaczy. setnames (db [, x1: = mean (y), by = id] [, x: = NULL], 'x1', 'x') – hallvig
Haha Będę - wystarczy poczekać kilka minut ;-) – hallvig
@hallvig Dzięki – akrun