将新计算的值添加到R中的组

时间:2019-07-16 19:20:28

标签: r

我想在我的分组输出中添加一个新的计算列。新列的名称为WHIP。通过将H和BB相加然后将结果除以IP来计算。

以下是输入示例: enter image description here

通过我的代码,我可以走得很远了

wheeler %>% 
filter(DR<99) %>%    
group_by(DR) %>%
summarise(n = n(), avg_ER = mean(ER, na.rm=T)) %>%
mutate_if(is.numeric, round, digits = 2)

我尝试添加此内容:

summarise(n = n(), avg_ER = mean(ER, na.rm=T), WHIP =((H + BB) / IP)

但是它不起作用。我希望输出看起来像这样:

     DR     n avg_ER  WHIP
1     4    11   2.91  1.00
2     5     6   3.17  0.45
3     6     1   7.00  1.33

2 个答案:

答案 0 :(得分:0)

首先尝试将WHIP变量包装在sum中。否则,您尝试为每个观察值而不是为该组计算WHIP,因此summarise不起作用。

df <- data.frame(ip=1:8, dp = sample(1:4, 8, T), er = sample(1:4, 8, T), 
                 h=sample(1:5,8,T),bb=sample(2:6,8,T)) %>%
  group_by(dp) %>%
  summarise(n = n(), avg_ER = mean(er), 
            WHIP = (sum(h)+ sum(bb)) / sum(ip))

答案 1 :(得分:0)

我仍然对所需输出的确切内容感到困惑。听起来您想要两件事:1)计算逐行WHIP,2)计算按DR分组的摘要统计信息。这就是我要做的。

df <- data.frame(ip=1:8, 
                 dr = sample(1:4, 8, T), 
                 er = sample(1:4, 8, T), 
                 h=sample(1:5,8,T),
                 bb=sample(2:6,8,T))

df$whip <- (df$bb+df$h)/df$ip

df %>% group_by(dr) %>% 
  summarise(mean.er=mean(er),n=n()) %>% left_join(df,.)

  ip dr er h bb      whip mean.er n
1  1  3  3 4  2 6.0000000    2.00 2
2  2  1  2 1  3 2.0000000    2.75 4
3  3  2  4 3  5 2.6666667    2.50 2
4  4  1  3 5  3 2.0000000    2.75 4
5  5  3  1 5  6 2.2000000    2.00 2
6  6  1  4 5  3 1.3333333    2.75 4
7  7  2  1 3  2 0.7142857    2.50 2
8  8  1  2 2  2 0.5000000    2.75 4

因此,您将获得原始行数,每行的WHIP值以及基于灾难恢复组的摘要统计信息。

@ bjorn2bewild的解决方案为您提供不同的输出。

df %>% group_by(dr) %>%
  summarise(n = n(), avg_ER = mean(er), 
            WHIP = (sum(h)+ sum(bb)) / sum(ip))

# A tibble: 3 x 4
     dr     n avg_ER  WHIP
  <int> <int>  <dbl> <dbl>
1     1     4   2.75  1.2 
2     2     2   2.5   1.3 
3     3     2   2     2.83