【发布时间】:2021-04-22 08:57:13
【问题描述】:
我目前正在尝试为每个分组列选择不连续的日期。
换句话说,我有以下数据框:
我想基本上group_by(Site) 然后为每个分组站点只保留 3 个随机不连续的日期。例如,如果 HP37P1B 的日期对应于 3 月 12 日、3 月 13 日、3 月 14 日和 3 月 7 日 - 我需要一个数据框(例如),它只有:
HP37P1B 12th March
HP37P1B 14th March
HP37P1B 7th March
到目前为止,我已经尝试了许多使用 diff()、ave() 和 lubridate 包的 stackoverflow 帖子,但我没有任何成功。
编辑
根据下面的 cmets,我试图让这个问题可重现
dput(uniqueSiteDate)
structure(list(Site = c("HP37P1B", "HP37P2B", "HP37P4B", "HP4008U",
"INME03R", "INME03U", "INOA03R", "IPTO04R", "IPTO04U", "IPTO06R",
"IPTO06U", "OLCAP2B", "OLCAP3B", "OLCAP5B", "PANMP1B", "PANMP2B",
"PANMP3B", "STIN02R", "STIN02U", "UPMAP1B", "UPMAP3B", "UPMAP4B",
"UPMAP5B", "UPMAP6B", "VAR210R", "VAR310R", "VAR310U", "VAR410R",
"VAR410U", "HP36P1B", "HP36P3B", "HP36P4B", "HP4008R", "INBS04R",
"INBS04U", "SEL107R", "SEL107U", "SEL207R", "SEL207U", "OLV110R",
"OLV110U", "OLV208R", "OLV208U", "THEN10U", "HP37P1B", "HP37P2B",
"HP37P4B", "HP4008U", "INME03R", "INME03U", "INOA03R", "IPTO04R",
"IPTO04U", "IPTO06R", "IPTO06U", "OLCAP2B", "OLCAP3B", "OLCAP5B",
"PANMP1B", "PANMP2B", "PANMP3B", "STIN02R", "STIN02U", "UPMAP1B",
"UPMAP3B", "UPMAP4B", "UPMAP5B", "UPMAP6B", "VAR210R", "VAR310R",
"VAR310U", "VAR410R", "VAR410U", "OLV110R", "OLV110U", "OLV208R",
"OLV208U", "THEN10U", "HP37P1B", "HP37P2B", "HP37P4B", "HP4008U",
"INME03R", "INME03U", "INOA03R", "IPTO04R", "IPTO04U", "IPTO06R",
"IPTO06U", "OLCAP2B", "OLCAP3B", "OLCAP5B", "PANMP1B", "PANMP2B",
"PANMP3B", "STIN02R", "STIN02U", "UPMAP1B", "UPMAP3B", "UPMAP4B",
"UPMAP5B", "UPMAP6B", "VAR210R", "VAR310R", "VAR310U", "VAR410R",
"VAR410U", "OLV110R", "OLV110U", "OLV208R", "OLV208U", "THEN10U",
"HP37P1B", "HP37P2B", "HP37P4B", "HP4008U", "INME03R", "INME03U",
"INOA03R", "IPTO04R", "IPTO04U", "IPTO06R", "IPTO06U", "OLCAP2B",
"OLCAP3B"), Date = structure(c(18333, 18333, 18333, 18333, 18335,
18335, 18335, 18338, 18335, 18338, 18335, 18333, 18333, 18333,
18334, 18334, 18334, 18331, 18331, 18331, 18330, 18330, 18330,
18330, 18332, 18332, 18332, 18332, 18332, 18325, 18325, 18325,
18325, 18327, 18327, 18327, 18327, 18327, 18328, 18340, 18340,
18340, 18340, 18340, 18334, 18334, 18334, 18334, 18336, 18336,
18336, 18339, 18336, 18340, 18336, 18335, 18334, 18334, 18335,
18335, 18335, 18332, 18332, 18332, 18331, 18331, 18331, 18331,
18333, 18333, 18333, 18333, 18333, 18341, 18341, 18341, 18341,
18341, 18335, 18335, 18335, 18335, 18383, 18383, 18383, 18384,
18384, 18384, 18384, 18385, 18385, 18335, 18342, 18342, 18341,
18383, 18383, 18345, 18349, 18349, 18349, 18349, 18340, 18339,
18340, 18341, 18339, 18386, 18386, 18348, 18346, 18347, 18328,
18328, 18328, 18328, 18390, 18389, 18391, 18392, 18392, 18392,
18392, 18392, 18392), class = "Date")), row.names = c(NA, -125L
), groups = structure(list(Site = c("HP36P1B", "HP36P3B", "HP36P4B",
"HP37P1B", "HP37P2B", "HP37P4B", "HP4008R", "HP4008U", "INBS04R",
"INBS04U", "INME03R", "INME03U", "INOA03R", "IPTO04R", "IPTO04U",
"IPTO06R", "IPTO06U", "OLCAP2B", "OLCAP3B", "OLCAP5B", "OLV110R",
"OLV110U", "OLV208R", "OLV208U", "PANMP1B", "PANMP2B", "PANMP3B",
"SEL107R", "SEL107U", "SEL207R", "SEL207U", "STIN02R", "STIN02U",
"THEN10U", "UPMAP1B", "UPMAP3B", "UPMAP4B", "UPMAP5B", "UPMAP6B",
"VAR210R", "VAR310R", "VAR310U", "VAR410R", "VAR410U"), .rows = structure(list(
30L, 31L, 32L, c(1L, 45L, 79L, 113L), c(2L, 46L, 80L, 114L
), c(3L, 47L, 81L, 115L), 33L, c(4L, 48L, 82L, 116L), 34L,
35L, c(5L, 49L, 83L, 117L), c(6L, 50L, 84L, 118L), c(7L,
51L, 85L, 119L), c(8L, 52L, 86L, 120L), c(9L, 53L, 87L, 121L
), c(10L, 54L, 88L, 122L), c(11L, 55L, 89L, 123L), c(12L,
56L, 90L, 124L), c(13L, 57L, 91L, 125L), c(14L, 58L, 92L),
c(40L, 74L, 108L), c(41L, 75L, 109L), c(42L, 76L, 110L),
c(43L, 77L, 111L), c(15L, 59L, 93L), c(16L, 60L, 94L), c(17L,
61L, 95L), 36L, 37L, 38L, 39L, c(18L, 62L, 96L), c(19L, 63L,
97L), c(44L, 78L, 112L), c(20L, 64L, 98L), c(21L, 65L, 99L
), c(22L, 66L, 100L), c(23L, 67L, 101L), c(24L, 68L, 102L
), c(25L, 69L, 103L), c(26L, 70L, 104L), c(27L, 71L, 105L
), c(28L, 72L, 106L), c(29L, 73L, 107L)), ptype = integer(0), class = c("vctrs_list_of",
"vctrs_vctr", "list"))), row.names = c(NA, -44L), class = c("tbl_df",
"tbl", "data.frame"), .drop = TRUE), class = c("grouped_df",
"tbl_df", "tbl", "data.frame"))
要回答其他问题,有时每个站点的日期超过 3 个,但有时每个站点只有 1 个日期。但想法是选择 n 个给定站点的非连续日期。换句话说,如果一个特定的网站有 4 个日期,我需要 3 个不连续的日期。如果某个特定网站只有 1 个日期,我们就把它留在里面。
【问题讨论】:
-
1.你能举个例子reproducible吗? 2.
Site的日期是否总是至少有3个? 3.“非连续”部分是硬性要求吗?或者随机抽样 3 个日期(因此可能是连续的)的解决方案是否令人满意?如果没有,是否保证不仅有 3 个日期,而且有 3 个日期可以找到解决方案? -
即使你的图片与所述示例不匹配??第一个
site的日期对于所有三行都是相同的。 -
我添加了更多信息来帮助回答这个问题@Aurèle
-
@AnoushiravanR 见上面的编辑
-
在提供的数据中,第一组的所有日期都相同?