按组查找插值,可能使用dplyr

时间:2016-05-30 20:10:17

标签: r dplyr interpolation

我希望在interp管道中使用interp2xyz中的akimadplyr函数,因为我想通过组变量计算插值并输出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插值的方法,以便产生具有所有组及其插值的数据帧?

1 个答案:

答案 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(.))