用子组总计 (R) 填充列

Fill Down Column with SubGroup Totals (R)

我想获取子组中唯一值的数量,并创建一个列,其中包含由子组填充的唯一值数量。

我已经尝试过这段代码,但它并没有完全按照我希望的方式工作:

data$ones=1
data=transform(data,Count=ave(ones,UniqueID,FUN=sum))

数据是这样的:

Group UniqueID
Grp1  1-A
Grp1  1-B
Grp1  1-B
Grp1  1-C
Grp2  2-A
Grp2  2-A
Grp2  2-B
Grp3  3-A
Grp3  3-A
Grp3  3-A

这就是我想要的样子:

Group UniqueID Count
Grp1  1-A      3
Grp1  1-B      3
Grp1  1-B      3
Grp1  1-C      3
Grp2  2-A      2
Grp2  2-A      2
Grp2  2-B      2
Grp3  3-A      1
Grp3  3-A      1
Grp3  3-A      1

如有任何帮助,我们将不胜感激。

我们可以使用 dplyr 包中的 n_distinct

library(dplyr)

dat2 <- dat %>%
  group_by(Group) %>%
  mutate(Count = n_distinct(UniqueID)) %>%
  ungroup()
dat2
# # A tibble: 10 x 3
#    Group UniqueID Count
#    <chr> <chr>    <int>
#  1 Grp1  1-A          3
#  2 Grp1  1-B          3
#  3 Grp1  1-B          3
#  4 Grp1  1-C          3
#  5 Grp2  2-A          2
#  6 Grp2  2-A          2
#  7 Grp2  2-B          2
#  8 Grp3  3-A          1
#  9 Grp3  3-A          1
# 10 Grp3  3-A          1

数据

dat <- read.table(text = "Group UniqueID
Grp1  '1-A'
Grp1  '1-B'
Grp1  '1-B'
Grp1  '1-C'
Grp2  '2-A'
Grp2  '2-A'
Grp2  '2-B'
Grp3  '3-A'
Grp3  '3-A'
Grp3  '3-A'",
                  header = TRUE, stringsAsFactors = FALSE)