Линейная интерполяция по списку фреймов данных - PullRequest
0 голосов
/ 21 мая 2019

Я пытаюсь выполнить линейную интерполяцию среднего уровня воды для каждого фрейма данных, содержащегося в списке фреймов данных (всего 1038), с использованием семейства apply, но у меня возникают проблемы с определением переменных в функции интерполяциичтобы указать столбцы в каждом фрейме данных.

Вот заголовок моего списка:

head(df_list)
$`1928-01-01`
      station date_measured daily_mean max min mean      lon      lat
8267 20250000    1928-01-01          0 453 193  272 -49.5519 -15.2753
8268 20250000    1928-01-01          0 453 191  276 -49.5519 -15.2753

$`1928-02-01`
      station date_measured daily_mean max min mean      lon      lat
8269 20250000    1928-02-01          0  NA  NA   NA -49.5519 -15.2753
8270 20250000    1928-02-01          0  NA  NA   NA -49.5519 -15.2753

$`1928-03-01`
      station date_measured daily_mean max min mean      lon      lat
8271 20250000    1928-03-01          0 394 219  282 -49.5519 -15.2753
8272 20250000    1928-03-01          0 382 218  281 -49.5519 -15.2753

$`1928-04-01`
      station date_measured daily_mean max min mean      lon      lat
8273 20250000    1928-04-01          0 280 176  224 -49.5519 -15.2753
8274 20250000    1928-04-01          0 287 178  223 -49.5519 -15.2753

$`1928-05-01`
      station date_measured daily_mean max min mean      lon      lat
8275 20250000    1928-05-01          0 199 161  172 -49.5519 -15.2753
8276 20250000    1928-05-01          0 197 162  173 -49.5519 -15.2753

$`1928-06-01`
      station date_measured daily_mean max min mean      lon      lat
8277 20250000    1928-06-01          0 174 132  149 -49.5519 -15.2753
8278 20250000    1928-06-01          0 173 132  149 -49.5519 -15.2753

Это то, что я пытался изначально:

daily_int <- lapply(df_list, function(x) interp(x=lon,y=lat,z=mean, method="linear"))

Что привело кв следующей ошибке:

 Error in interp(x = lon, y = lat, z = mean, method = "linear") : 
  object 'lat' not found 

Я понимаю, что функция interp не находит столбец, на который я хочу ее посмотреть, и, будучи новичком в семействе apply, я не знаю, как это сделать (или если это вообще возможно).По сути, мне нужно интерполировать ежедневные уровни воды через реку, и я хотел бы сделать это наиболее эффективным способом, сохраняя при этом дни раздельными.

Редактирование на основе комментария: я пытаюсь предсказать среднее, минимальное и максимальное значения для каждого кадра данных.

Ответы [ 2 ]

2 голосов
/ 21 мая 2019

Я не совсем уверен, какие значения вы пытаетесь предсказать для использования функции interp

Что касается проверки: каждое значение в списке становится x в функции. Таким образом, используя with(), вы можете назначить фрейм данных, с которым вы работаете, в функции interp.

daily_int <- lapply(df_list, function(x) {
    out <- with(x,interp(x=lon,y=lat,z=mean, method="linear"))
    return(out)
})

У меня нет R, чтобы проверить это, и я не знаком с interp на моей голове, так что обновлю позже!

1 голос
/ 22 мая 2019

Я не знаком с используемой вами функцией interp, но в целом, если вы хотите получить доступ к именам столбцов фреймов данных в цикле lapply, должно работать следующее:

daily_int <- lapply(df_list, function(x) interp(x=x$lon,y=x$lat,z=x$mean, method="linear"))

Это работает?Если нет, возможно, это будет работать:

daily_int <- lapply(df_list, function(x) interp(x=x[["lon"]],y=x[["lat"]],z=x[["mean"]], method="linear"))
...