У меня есть два набора данных с временными шагами t и высотой h, которые я объединил.
dataset_a <- data.table(t=rep(c(1,2,3,4,5,6,7,8,9), each=5),
h=rep(c(1:5)),
v=c(1:(5*9)))
у одного есть пробелы в измерениях и значения, в которых мы фактически измеряли, но ничего не измеряли.
dataset_b <- data.table(t=rep(c(1,2,4,5,6,8,9), each=5),
h=rep(c(1:5)),
w=c(1:(5*7)))
dataset_b$w[12:20] <-0
объединение:
dataset_merged <- merge(dataset_a, dataset_b, all=TRUE, by = c('t', 'h'))
Теперь я хочу заполнить пробелы. Как сообщить таблице data.table использовать соседние значения для заполнения пикселя?
dataset_merged[is.na(w),
w:= mean(c(the value at this h one timestep earlier, the value at this h one timestep later))]
Большое спасибо!
Edit После очень полезного комментария Бенса мне пришлось скорректировать воспроизводимый пример: его решение работает, но не в случае «кадрирования» данных отсутствует: если
dataset_b <- data.table(t=rep(c(2,4,5,6,8,9), each=5),
h=rep(c(1:5)),
w=c(1:(5*6)))
#removed the first timestep in this case
dataset_merged <- merge(dataset_a, dataset_b, all=TRUE, by = c('t', 'h'))
library(zoo)
dataset_merged[order(h,t)][, w := na.approx(w)]
дает
Error in `[.data.table`(dataset_merged[order(h, t)], , `:=`(w, na.approx(w))) :
Supplied 44 items to be assigned to 45 items of column 'w'. The RHS length must either be 1 (single values are ok) or match the LHS length exactly. If you wish to 'recycle' the RHS please use rep() explicitly to make this intent clear to readers of your code.
, было бы нормально оставить их как NA, но как мне сделать это понятным для функции? К сожалению, исходные данные не находятся на регулярной сетке.