Я пытаюсь передать вложенный список в функцию сплайна. У меня есть квартальные значения осадков для двух городов в течение двух лет подряд. Я пытаюсь выполнить сплайн-интерполяцию, чтобы получить месячные значения за эти годы
Вот что я попробовал:
# Create a dummy data-frame
df = data.frame(city_name = rep(sapply(c('city_a','city_b'), function(x) {rep(x, 8)}), 1),
period = rep(sapply(c('2016-17','2017-18'), function(x) {rep(x, 4)}), 2),
quarter = rep(sapply(c('q1','q2','q3','q4'), function(x) {rep(x, 1)}), 4),
e_date = rep(seq(zoo::as.Date('2016-12-01'),zoo::as.Date('2018-09-01'), by='quarter'),2),
x = c(5.3, 5.7, 5.6, 5.9, 5.8, 6.1, 6.2, 6.5, 5.7, 5.8, 5.5, 5.9, 5.7, 5.8, 6.1, 6.1))
# Create separate lists for each city
out <- split(df, f = df$city_name)
# Columns to exclude from the lists - way spline works I guess!
cols_to_drop = c('city_name','period','quarter')
# drop desired cols from each list
temp <- lapply(out, function(x) x[,!(colnames(x) %in% cols_to_drop), drop=F])
# create a sequential placeholder for monthly dates
monthly = sort(seq(zoo::as.Date('2016-12-01'), zoo::as.Date('2018-09-01'), by="month"))
# Create lists using spline interpolation
spline_df <- data.frame(periodicity=monthly, x_est=spline(temp$city_a, method = 'fmm', xout = monthly)$y)
Но вместо передачи temp$city_name
как я могу передать весь список, чтобы он возвращал фрейм данных интерполированных списков или фреймов данных?
Названия городов могут быть столбцами или индексами строк - либо работают