自定义函数,用于循环遍历嵌套框架中的组。
以下是一些样本数据:
set.seed(42)
tm <- as.numeric(c("1", "2", "3", "3", "2", "1", "2", "3", "1", "1"))
d <- as.numeric(sample(0:2, size = 10, replace = TRUE))
t <- as.numeric(sample(0:2, size = 10, replace = TRUE))
h <- as.numeric(sample(0:2, size = 10, replace = TRUE))
df <- as.data.frame(cbind(tm, d, t, h))
df$p <- rowSums(df[2:4])
字符串
我创建了一个自定义函数来计算值w:
calc <- function(x) {
data <- x
w <- (1.27*sum(data$d) + 1.62*sum(data$t) + 2.10*sum(data$h)) / sum(data$p)
w
}
型
当我在整个数据集上运行该函数时,我得到以下答案:
calc(df)
[1]1.664474
型
理想情况下,我希望返回按tm分组的结果,例如:
tm w
1 result of calc
2 result of calc
3 result of calc
型
到目前为止,我已经尝试在我的函数中使用aggregate
,但我得到了以下错误:
aggregate(df, by = list(tm), FUN = calc)
Error in data$d : $ operator is invalid for atomic vectors
型
我觉得我已经盯着这个太久了,有一个明显的答案。
6条答案
按热度按时间92dk7w1h1#
你可以试试
split
:字符串
如果你想要一个列表
lapply(split(df, tm), calc)
。data.table
:型
j2cgzkjk2#
使用
dplyr
字符串
如果我们稍微修改函数以包含多个参数,这也可以用于
summarise
型
zbwhf8kr3#
从 * dqr 0.8* 开始,您可以使用
group_map
:字符串
nlejzf6q4#
字符串
yshpjwxd5#
.和Map功能解决方案.
字符串
ou6hu8tu6#
这是一个整洁的解决方案,也与整洁的格式完全兼容,这里用一个使用palmerpenguins数据集和线性回归模型的例子来说明:
字符串