Я хотел бы применить функцию ко всем строкам таблицы данных, для всех таблиц данных в списке, однако функция должна ссылаться на предыдущую строку в расчете (кроме строки 1, которая является независимой)
Я могу сделать это, когда не нужно ссылаться на предыдущий ряд;
require(data.table)
# dummy list data
l <- list(data.table(col1=c(2,3,4,2,1), col2=c(1,2,3,4,3), col3=c(5,4,3,4,5), col4=c(1,1,1,1,2)), data.table(col1=c(3,4,3,2,3), col2=c(1,3,4,2,2), col3=c(5,4,3,2,3), col4=c(5,5,5,5,5)))
# apply the function to the data table by row, and apply this function to all tables in the list
lapply(l, function(b) b[ , value := mapply(function(w,x,y,z) w + x + y * z, col1, col2, col3, col4)])
но как мне заставить value
учитывать value
из предыдущего ряда?
# this wont work b'cos value hasn't been created yet
lapply(l, function(b) b[ , value := mapply(function(w,x,y,z) w + x + y * z, col1, col2, col3, col4)])
Error in mapply(function(w, x, y, z, v) (w + x + y * z)/shift(v, 1), col1, :
object 'value' not found
# so make 'value' for row 1 only and try again
lapply(l, function(b) b[ , value := 0])
lapply(l, function(b) b[1 , value := col1 + col2 + col3 - col4])
# using shift inside mapply
lapply(l, function(b) b[ , value := mapply(function(w,x,y,z,v) (w + x + y * z) / shift(v,1), col1, col2, col3, col4, value)])
превращает столбец value
в NA