2016-05-30 2 views
2

Ищу использовать interp и interp2xyz функции от akima в dplyr трубы, как я хотел бы вычислить интерполяции с помощью групповой переменной и выводить АБВ ценности и группировка переменной. Так что в идеале я хотел бы что-то вроде этого (общее решение):Нахождение интерполяцией по группе, возможно, используя dplyr

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

Так что относительно просто вычислить некоторые значения интерполяции по всей dataframe, а затем создать еще один dataframe, который имеет эти значения с помощью функции интерполяции из 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 решение - это только подход, который я могу думать. Кто-нибудь знает способ вычисления трехмерной интерполяции с помощью переменной группировки, так что результатом является кадр данных со всеми группами и их интерполяции?

ответ

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(.)) 
Смежные вопросы