我想在我的分组输出中添加一个新的计算列。新列的名称为WHIP。通过将H和BB相加然后将结果除以IP来计算。
通过我的代码,我可以走得很远了
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
答案 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