我有一个函数,该函数接收两个向量并返回参数列表,类似于此参数:
f <- function(x, n) {
mu <- sum(x)/sum(n)
max <- max(x/n)
min <- min(x/n)
return(list(mu = mu, max = max, min = min))
}
现在,我想该功能适用于分组数据帧,并取回一个新的数据帧与列mu
,max
,min
和分组变量level
。
我试图这样做summarize
,如下所示:
data %>% group_by(level) %>% summarize(p=f(x=x, n=n))
但是,我得到的不是一个具有第四列的数据框,而是一个具有两列的数据框,其中第二列包含为包装为一个元素列表的函数而出现的每个参数的条目。
我可以处理该数据帧以生成所需的格式,如下所示:
data2 %>%
transmute(level=level, col=names(p), value=p[[1]]) %>%
pivot_wider(names_from=col, values_from=value)
但这看起来很复杂而且很丑陋,那么,有没有更简单的方法可以做到这一点?
更新:完整代码:
n <- sample(100, size=10, replace=TRUE)
x <- rbinom(100, n, 0.5)
level <- sample(c("a", "b", "c"), 100, replace=TRUE)
data <- data.frame(level=level, x=x, n=n)
f <- function(x, n) {
mu <- sum(x)/sum(n)
max <- max(x/n)
min <- min(x/n)
return(list(mu = mu, max = max, min = min))
}
data2 <- data %>% group_by(level) %>% summarize(p=f(x=x, n=n))
data3 <- data2 %>%
transmute(level=level, col=names(p), value=p[[1]]) %>%
pivot_wider(names_from=col, values_from=value)
您可以通过在函数中替换return(list(mu = mu, max = max, min = min))
为并像这样使用它来做到这一点:return(tibble(mu = mu, max = max, min = min))
f
df %>% group_by(group) %>% summarise(f(x, y))
其中group
被分组变量,x
并且y
在功能上可使用的变量f
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句