平衡意味着在r

时间:2018-03-06 16:26:08

标签: r

我正在努力从r中的表中获得平衡均值。在下表中,我想返回每个位置的平均值,但如果每个位置的“名称”总数超过一个,我想取平均值而不是平均值。

Name  Loc  Total
Jeff  IA     17
Jill  IA     67
Jeff  IL     12
Jeff  IL     13
Jill  IL     45
Jeff  MN     32
Jill  MN     65
Jeff  WI     23
Jill  WI     67


name <- c("Jeff", "Jeff", "Jeff", "Jeff", "Jeff", "Jill", "Jill", "Jill", "Jill")
loc <- c("IL", "IL","MN","WI","IA", "IL", "MN","WI","IA")
total <- c(12, 13, 32, 23, 17,  45, 65, 67, 67)

table <- data.frame(name, loc, total) %>% arrange(location)

如果我为此返回平均值

t3 <- aggregate(total ~ location, table , mean)

IA 42.00000
IL 23.33333
MN 48.50000
WI 45.00000

但是IL有3个值,Jeff在他的名字下有2个,所以IL的平均值应该是((12 + 13)/ 2 + 45)/ 2 = 28.75

这可以在R中完成吗。我很难过

2 个答案:

答案 0 :(得分:2)

好像你已经在使用dplyr,所以解决方案就是

table %>% group_by(loc, name) %>% 
  summarize(total=mean(total)) %>% 
  summarize(total=mean(total))
#      loc total
#   <fctr> <dbl>
# 1     IA 42.00
# 2     IL 28.75
# 3     MN 48.50
# 4     WI 45.00

首先我们按照loc和name进行分组。在第一次总结之后,我们崩溃了名称,以便不再分组。第二个总结使用了每个名称的方式。

答案 1 :(得分:1)

以下是使用R的基础aggregate替代方案:

aggregate(total ~ loc, data = aggregate(total ~ loc + name, data = table, FUN = mean), FUN = mean)

  loc total
1  IA 42.00
2  IL 28.75
3  MN 48.50
4  WI 45.00