自定义函数用于在数据框中循环遍历一组数据。
以下是一些示例数据:
我创建了一个自定义函数来计算值w:
当我在整个数据集上运行该函数时,我得到以下答案:
理想情况下,我希望返回按照tm分组的结果,例如:
到目前为止,我尝试使用
我觉得我盯着这个问题看得太久了,答案显而易见。
以下是一些示例数据:
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
我觉得我盯着这个问题看得太久了,答案显而易见。
dplyr
中完成。你知道对应的等效操作吗? - BillPettigroup_by(df, tm) %>% do(calc(.))
,但添加的as.data.frame
不太美观。 - MrGumble