我希望在interp
管道中使用interp2xyz
中的akima
和dplyr
函数,因为我想通过组变量计算插值并输出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))
错误:期待单个值
或者可能使用mutate
:
df %>%
group_by(Group) %>%
mutate(interp(x=x, y=y, z=z))
错误:大小不匹配(3),期望100(组大小)或1
我没有与dplyr
解决方案结婚 - 这只是我能想到的方法。有没有人知道通过分组变量计算3D插值的方法,以便产生具有所有组及其插值的数据帧?
答案 0 :(得分:3)
没有尝试,只有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(.))