2015-10-03 3 views
1

время назад я сделал это функции:Применить свою собственную функцию dplyr tbl_df

vap.vector <- function (x, y) { 
    y[is.infinite(y)] <- NA 
    y[y == 0] <- NA 
    logtasa <- log(y) 
    datos <- data.frame(x, logtasa) 
    datos <- na.omit(datos) 
    lmdatos <- lm(logtasa ~ x, data = datos) 
    es <- qt(0.975, lmdatos$df.residual) * summary(lmdatos)$coefficients[2, 2] 
    vap <- summary(lmdatos)$coefficients[2, 1] 
    vec <- c(vap = vap, es = es, lwr = vap - es, upr = vap + es) 
    round((1 - exp(vec)) * -100, 2) 
} 

vap_ <- function (df, x, y) { 
    x = lazyeval::lazy_eval(x, df) 
    y = lazyeval::lazy_eval(y, df) 
    vap.vector(x, y) 
} 

vap <- function (df, x, y) 
vap_(df, lazyeval::lazy(x), lazyeval::lazy(y)) 

У меня есть этот набор данных

https://drive.google.com/file/d/0Bw2XRcfksYZuX1R5bG9oZzdhZ2M/view?usp=sharing

, и я хочу сделать:

tbl_df %>% group_by(code, sex) %>% vap(year, values) 

или

tbl_df %>% group_by(code, sex) %>% 
      summarise(vap = vap.vector(year, values)[1], 
        lwr = vap.vector(year, values)[3], 
        upr = vap.vector(year, values)[4] 
) 

и, как результат, data.frame с колонками кода, пола и vap, lwr и upr.

но я не могу этого сделать. Я второй Подход я получаю:

Error: 0 (non-NA) cases 

Существует односвязный способ сделать это, или мне нужно быть @hadley

Я работаю на Windows, с R 3.2.2 и 0.4.3 dplyr. Спасибо заранее ...

+0

Вы пытаетесь написать метод? –

ответ

1

Вам просто нужно сделать использование do:

vap.vector <- function (x, y) { 
    y[is.infinite(y)] <- NA 
    y[y == 0] <- NA 
    logtasa <- log(y) 
    datos <- data.frame(x, logtasa) 
    datos <- na.omit(datos) 
    lmdatos <- lm(logtasa ~ x, data = datos) 
    es <- qt(0.975, lmdatos$df.residual) * summary(lmdatos)$coefficients[2, 2] 
    vap <- summary(lmdatos)$coefficients[2, 1] 
    vec <- c(vap = vap, es = es, lwr = vap - es, upr = vap + es) 
    round((1 - exp(vec)) * -100, 2) 
} 

Data <- read.table("dataset.csv", sep = ",", header = TRUE) 

library(dplyr) 
Results <- 
    Data %>% 
    group_by(code, sex) %>% 
    do(as.data.frame(t(vap.vector(.$year, .$values)[-2]))) 

, который производит:

> head(as.data.frame(Results)) 
    code sex vap lwr upr 
1 0 F 2.10 1.07 3.13 
2 0 M 0.92 0.00 1.85 
3 2 F 3.82 2.91 4.73 
4 2 M 2.72 1.95 3.49 
5 4 F 3.23 2.25 4.21 
6 4 M 3.76 2.70 4.83 
+0

Спасибо tguzella за ответ ... Я попробовал это в первый раз, но не работает в своем ноутбуке. Я думаю, что есть проблема, потому что мой набор данных был как tbl_df, и когда я читал набор данных из csv, ваш aproach и мой второй работает нормально. Я думаю, что проблема связана с значениями Inf, потому что при использовании: tbl_df%>% filter (! Is.infinite (значения))%>% .... работает Ok и aproach. – Diego

+0

Я пытался воспроизвести ошибку read.csv ('dataset.csv')%>% tbl_df()%>% bla bla bla, но все работает нормально. Я думаю, что есть паранормальная активность .... несколько раз Ошибка: 0 (не-NA) случаях несколько раз нормально ... – Diego

+0

Может быть, когда запись tbl_df как csv для обмена чем-то изменилась. Но я клянусь, тип столбца один и тот же ... – Diego

Смежные вопросы