我想在分组输出中添加一个新的计算列。新列的名称是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发布于 2019-07-17 03:44:34
首先尝试在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))发布于 2019-07-17 03:56:31
我仍然对期望的输出到底是什么感到困惑。听起来您需要两件事: 1)计算逐行鞭子,2)计算按do分组的汇总统计数据。这就是我要做的。
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因此,您可以获得原始行数、每个行的鞭状值,以及基于DR组的汇总统计信息。
而@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.83https://stackoverflow.com/questions/57064111
复制相似问题