2016-05-30 50 views
2

我期待在dplyr管道中使用akimainterpinterp2xyz函數,因爲我想通過組變量計算插值並輸出xyz值和分組變量。所以,我的理想,我想是這樣的(一般解決方案):按組查找插值,可能使用dplyr

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插值的方法,以至於所有組及其插值的數據框都是結果?

回答

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