将我自己的函数应用于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