首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将我自己的函数应用于dplyr tbl_df

将我自己的函数应用于dplyr tbl_df
EN

Stack Overflow用户
提问于 2015-10-03 15:47:01
回答 1查看 256关注 0票数 1

很久以前,我做过这样的功能:

代码语言:javascript
复制
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

我想做:

代码语言:javascript
复制
tbl_df %>% group_by(code, sex) %>% vap(year, values)

代码语言:javascript
复制
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和普遍定期审议栏。

但我做不到。我得到的第二个机会是:

代码语言:javascript
复制
Error: 0 (non-NA) cases

有一个简单的方法,否则我需要@hadley

我正在Windows上使用R3.2.2和dplyr0.4.3。提前谢谢..。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-03 17:50:44

你只需要使用do

代码语言:javascript
复制
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])))

它产生:

代码语言:javascript
复制
> 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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32924456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档