r - 按组查找插值,也许使用 dplyr

标签 r dplyr interpolation

我希望像我一样在 dplyr 管道中使用来自 akimainterpinterp2xyz 函数就像通过组变量计算插值并输出 xyz 值和分组变量一样。所以我理想地想要这样的东西(通用解决方案):

DATFRAME %>%
group_by(GROUPING VARIABLE) %>%
summarise(interp(x, y , z))

因此,在整个数据帧上计算一些插值,然后使用 akima 包中的插值函数创建另一个具有这些值的数据帧是相对简单的:

library(dplyr)
library(akima)

df <- data.frame(
  x=runif(200, 0, 5),
  y=runif(200, 0, 5),
  z=runif(200, 1, 2),
  Group=LETTERS[seq( from = 1, to = 2 )])

interp_df <- interp(x=df$x, y=df$y, z=df$z)

interp2xyz(interp_df, data.frame=TRUE)

但是当我尝试将它们合并到 dplyr 管道设置中时,如下所示:

df %>%
  group_by(Group) %>%
  summarise(interp(x=x, y=y, z=z))

Error: expecting a single value

或者也许使用mutate:

df %>%
  group_by(Group) %>%
  mutate(interp(x=x, y=y, z=z))

Error: incompatible size (3), expecting 100 (the group size) or 1

我并没有选择 dplyr 解决方案 - 这只是我能想到的方法。有谁知道通过分组变量计算 3D 插值的方法,这样结果就是包含所有组及其插值的数据帧?

最佳答案

没有 try,只有 do():

dpinterp <- function(df) {
  interp_df <- interp(x=df$x, y=df$y, z=df$z)
  interp2xyz(interp_df, data.frame=TRUE)
}

df %>%
  group_by(Group) %>%
  do(dpinterp(.))

关于r - 按组查找插值,也许使用 dplyr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37533044/

相关文章:

r - R中并行计算的stdout和stderr

r - 使用 optim、ML 将 Gamma 分布拟合到 R 中的数据

r - 条件矩阵邻接计算

r - 如何用相应列的值替换多列中的 NA

r - 是否可以在 R 中使用 ifelse() 添加第三个虚拟变量?

python - python中不同维度数组的二维插值

r - 如何将 NA 移动到 R data.frame 列的顶部?

r - 减去行并创建新的行名称

Matlab 3D 插值

python - 将振荡(插值)函数与 GSL 和 python 集成