【问题标题】:Linear interpolation over a list of data frames数据帧列表上的线性插值
【发布时间】:2019-05-21 20:50:28
【问题描述】:

我正在尝试使用 apply 系列函数对包含在数据帧列表(总共 1038 个)中的每个数据帧执行平均水位的线性插值,但我无法在插值函数中定义变量指向每个数据框中的列。

这是我列表的开头:

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 系列的新手,我不知道该怎么做(或者是否可能)。从本质上讲,我需要对河流的每日水位进行插值,我希望以最有效的方式进行,同时保持日子分开。

根据评论进行编辑:我正在尝试预测每个数据帧的平均值、最小值和最大值。

【问题讨论】:

  • 使用什么包来调用你的函数interp?它不在base
  • 是interp包。

标签: r lapply


【解决方案1】:

我不确定您要使用 interp 函数预测哪些值

就 lapply 而言:列表中的每个值都成为函数中的 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,所以稍后会更新!

【讨论】:

  • 理论上,这是可行的,但基于插值的数据存在其他问题。努力纠正数据,以便确保它正常工作。
  • 我认为您的问题的关键是您需要确保function(x) 中的x 代表数据框。然后您可以使用with 函数,也可以使用$,如x=x$lon,y=x$lat。希望这是有道理的
【解决方案2】:

我不熟悉您正在使用的 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"))

【讨论】:

    猜你喜欢
    • 2023-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-30
    相关资源
    最近更新 更多