Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将我自己的函数应用于dplyr tbl_df_R_Dplyr - Fatal编程技术网

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

将我自己的函数应用于dplyr tbl_df,r,dplyr,R,Dplyr,很久以前,我做了以下功能: 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)

很久以前,我做了以下功能:

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

结果是data.frame包含code、sex和vap、lwr和upr列

但我做不到。我收到的第二封邮件:

Error: 0 (non-NA) cases
有一个简单的方法可以做到这一点,否则我需要成为@hadley

我正在使用R3.2.2和DPLYR0.4.3操作Windows。
提前感谢…

您只需使用
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])))

你想写一个方法吗?谢谢tguzella的回答。。。我第一次试过,但在我的笔记本上不起作用。我认为这是一个问题,因为我的数据集是tbl_df,当我从csv读取数据集时,您的aproach和我的第二个都正常工作。我认为问题在于Inf值,因为当使用:tbl_df%%>%过滤器(!is.infinite(values))%%>%。。。。两个都正常。我试图重现错误read.csv('dataset.csv')%%>%tbl_df()%%>%bla bla bla bla bla,但都正常。我认为有超自然的活动。。。。有时错误:0(非NA)情况有时正常…可能是当将tbl_df写入csv以共享某些内容时发生更改。但我发誓列类型是一样的。。。
Error: 0 (non-NA) cases
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