dplyr:根据匹配行添加数字

dplyr: add numbers based on matching rows

假设我有

> fig
  hands imp_spe   n
1     A       0  39
2     A       1  32
3     B       0   3
4     B       1   2
5     C       0 115
6     C       1  24
7     D       0  11
8     D       1   3

我想添加一个新列 fig$new,它在 fig$n 中添加数字,但仅当 fig$hands 中的行匹配时。

我需要保持数据帧原样。

预期输出

> fig
  hands imp_spe   n   new
1     A       0  39    71 
2     A       1  32    71
3     B       0   3     5
4     B       1   2     5
5     C       0 115   139
6     C       1  24   139
7     D       0  11    14
8     D       1   3    14

我正在 dplyr

寻找解决方案
fig <- structure(list(hands = c("A", "A", "B", "B", "C", "C", "D", "D"
), imp_spe = c(0, 1, 0, 1, 0, 1, 0, 1), n = c(39L, 32L, 3L, 2L, 
115L, 24L, 11L, 3L)), row.names = c(NA, -8L), class = "data.frame")

给你

library(dplyr)

fig %>%
  group_by(hands) %>%
  mutate(new = sum(n)) %>%
  ungroup

dplyr 解法:

dplyr::add_count(fig, hands, wt = n, name = 'new')

#   hands imp_spe   n new
# 1     A       0  39  71
# 2     A       1  32  71
# 3     B       0   3   5
# 4     B       1   2   5
# 5     C       0 115 139
# 6     C       1  24 139
# 7     D       0  11  14
# 8     D       1   3  14

base 解决方案:

transform(
    fig,
    new = ave(x = n, hands, FUN = sum)
)

#   hands imp_spe   n new
# 1     A       0  39  71
# 2     A       1  32  71
# 3     B       0   3   5
# 4     B       1   2   5
# 5     C       0 115 139
# 6     C       1  24 139
# 7     D       0  11  14
# 8     D       1   3  14