我正在寻求一些帮助来生成数据集的新列,该列将充当“调整”数字,以克服每个站点上每种框类型数量不等的限制。 我有四个站点 A、B、C 和 D,并且站点上有 8 个处理/类型的盒子。这是在我进入该项目之前设置的,因此每个站点上每种类型的盒子数量不相等。这些框已在多个日期被选中,虽然单个站点上的所有框都将在同一日期被选中,但其他站点上的框将在不同日期被选中。
我想要生成的是该网站上该盒子类型的数量/该网站上盒子总数的计数。
我的数据结构类似于以下内容:
# A tibble: 16 × 5
Site ID Date Type Count
<fct> <fct> <date> <fct> <dbl>
1 A 101 2024-02-02 x 4
2 A 101 2024-02-02 y 6
3 A 101 2024-02-02 x 9
4 B 103 2024-02-01 x 10
5 B 103 2024-02-01 z 2
6 C 106 2024-01-30 y 8
7 D 108 2024-01-26 x 5
8 D 108 2024-01-26 z 6
9 A 101 2024-01-24 x 3
10 A 101 2024-01-24 y 3
11 A 101 2024-01-24 x 4
12 B 103 2024-01-21 x 8
13 B 103 2024-01-21 z 5
14 C 106 2024-01-20 y 5
15 D 108 2024-01-19 x 7
16 D 108 2024-01-19 z 7
structure(list(Site = structure(c(1L, 1L, 1L, 2L, 2L, 3L, 4L,
4L, 1L, 1L, 1L, 2L, 2L, 3L, 4L, 4L), levels = c("A", "B", "C",
"D"), class = "factor"), ID = structure(c(1L, 1L, 1L, 2L, 2L,
3L, 4L, 4L, 1L, 1L, 1L, 2L, 2L, 3L, 4L, 4L), levels = c("101",
"103", "106", "108"), class = "factor"), Date = structure(c(19755,
19755, 19755, 19754, 19754, 19752, 19748, 19748, 19746, 19746,
19746, 19743, 19743, 19742, 19741, 19741), class = "Date"), Type = structure(c(1L,
2L, 1L, 1L, 3L, 2L, 1L, 3L, 1L, 2L, 1L, 1L, 3L, 2L, 1L, 3L), levels = c("x",
"y", "z"), class = "factor"), Count = c(4, 6, 9, 10, 2, 8, 5,
6, 3, 3, 4, 8, 5, 5, 7, 7)), row.names = c(NA, -16L), class = c("tbl_df",
"tbl", "data.frame"))
还有比这更多的条目,但你已经明白了要点。站点列与组相关,ID 列是站点上的位置。我这里的示例并不能很好地展示这一点,因为没有足够的行,但每个唯一 ID 都有 3 个与该位置关联的框(尽管它们可能是相同或不同的类型)。日期是检查日期。框的类型是我想要检查的内容,计数是该日期单个框内的结果计数。
这是我最初写的,但它不起作用:
mutated table <- df %>%
group_by(Site, Type, ID) %>%
mutate(n_unique = n_distinct(ID)*3) %>%
mutate(n_boxes = n_distinct(Site)*3) %>%
mutate(Adjustment = n_boxes / n_unique)
提前感谢您可以帮助我的任何更正或替代解决方案。
不确定这是否是您要找的:
library(dplyr)
df %>%
group_by(Site, ID, Type) %>%
mutate(sumCount_siteidtype = sum(Count)) %>%
group_by(Site, ID) %>%
mutate(sumCount_siteid = sum(Count)) %>%
ungroup()
# # A tibble: 16 × 7
# Site ID Date Type Count sumCount_siteidtype sumCount_siteid
# <fct> <fct> <date> <fct> <dbl> <dbl> <dbl>
# 1 A 101 2024-02-02 x 4 20 29
# 2 A 101 2024-02-02 y 6 9 29
# 3 A 101 2024-02-02 x 9 20 29
# 4 B 103 2024-02-01 x 10 18 25
# 5 B 103 2024-02-01 z 2 7 25
# 6 C 106 2024-01-30 y 8 13 13
# 7 D 108 2024-01-26 x 5 12 25
# 8 D 108 2024-01-26 z 6 13 25
# 9 A 101 2024-01-24 x 3 20 29
# 10 A 101 2024-01-24 y 3 9 29
# 11 A 101 2024-01-24 x 4 20 29
# 12 B 103 2024-01-21 x 8 18 25
# 13 B 103 2024-01-21 z 5 7 25
# 14 C 106 2024-01-20 y 5 13 13
# 15 D 108 2024-01-19 x 7 12 25
# 16 D 108 2024-01-19 z 7 13 25
如果您使用的是
dplyr_1.1.0
或更新版本 (packageVersion("dplyr")
),您可以使用以下命令将其缩短一点:
df %>%
mutate(sumCount_siteidtype = sum(Count), .by = c(Site, ID, Type)) %>%
mutate(sumCount_siteid = sum(Count), .by = c(Site, ID))