以下是我要做的事情:
dput(dat)
structure(list(group = structure(c(1L, 2L, 3L, 1L, 2L, 3L, 1L,
2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L), .Label = c("group1", "group2",
"group3"), class = "factor"), value = c(34L, 143L, 36L, 23L,
134L, 24L, 28L, 120L, 36L, 24L, 155L, 43L, 25L, 145L, 12L)), .Names = c("group",
"value"), row.names = c(NA, -15L), class = "data.frame")
> dat %>% ddply(.(group), function(x){sum((x$value-mean(x$value))^2)}) %>% .[["V1"]] %>% sum()
[1] 1372.8
基本上,按组计算平方和并对结果求和。
当我尝试使用dplyr
实现相同的目标时,我收到以下错误:
> dat %>% group_by(group) %>% do(function(x) {x$value-mean(x$value)})
Error: Results are not data frames at positions: 1, 2, 3
答案 0 :(得分:2)
您可以尝试summarise
,提取“V1”列和sum
dat %>%
group_by(group) %>%
dplyr::summarise(V1=sum((value-mean(value))^2))%>%
.$V1 %>%
sum()
#[1] 1372.8
答案 1 :(得分:2)
也许试试
library(dplyr)
dat %>%
group_by(group) %>%
summarise(V1 = sum((value - mean(value))^2)) %>%
summarise(V1 = sum(V1)) %>%
.$V1
# [1] 1372.8
或者,如果您需要do
:
dat %>%
group_by(group) %>%
do({data.frame(V1 = sum((.$value-mean(.$value))^2))}) %>%
ungroup() %>%
summarise(V1 = sum(V1)) %>%
.$V1
# [1] 1372.8