Я запустил следующий код:
id <- c(67, 39, 39, 39, 39, 39, 39, 39, 58, 58, 58, 58, 58, 58)
ratio <- c(0.5421248, 0.1558647, 0.1314578, 0.1095102, 0.1149908, 0.1645262, 0.1431160, 0.1633623,
1.1375268, 1.3219208, 1.3830684, 1.5942101, 0.5991420, 0.6303874)
DT <- data.table(id, ratio)
DT[, lapply(.SD,
function(x) rollapplyr(x,
width = 3,
weighted.mean,
w = c(0.2, 0.3, 0.5),
align = 'right',
fill = NA)),
by = id,
.SDcols = 'ratio']
И он дает следующую ошибку:
Error in `[.data.table`(DT, , lapply(.SD, function(x) rollapplyr(x, width = 3, :
Column 1 of result for group 2 is type 'double' but expecting type 'logical'. Column types must be consistent for each group.
Когда я исключаю первую строку следующим образом:
DT[2:14, lapply(.SD,
function(x) rollapplyr(x,
width = 3,
weighted.mean,
w = c(0.2, 0.3, 0.5),
align = 'right',
fill = NA)),
by = id,
.SDcols = 'ratio']
Я не получаю сообщения об ошибке. Я полагаю, это как-то связано с тем, что существует только один идентификатор = 67.
Есть ли способ избежать этой ошибки и просто получить NA для идентификатора 67?
Я действительно не понимаю почему не работает, потому что это работает:
rollapplyr(ratio,
width = 3,
weighted.mean,
w = c(0.2, 0.3, 0.5),
align = 'right',
fill = NA)