很久以前,我做过这样的功能:
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和普遍定期审议栏。
但我做不到。我得到的第二个机会是:
Error: 0 (non-NA) cases有一个简单的方法,否则我需要@hadley
我正在Windows上使用R3.2.2和dplyr0.4.3。提前谢谢..。
发布于 2015-10-03 17:50:44
你只需要使用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.83https://stackoverflow.com/questions/32924456
复制相似问题