我希望像我一样在 dplyr
管道中使用来自 akima
的 interp
和 interp2xyz
函数就像通过组变量计算插值并输出 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/