如何为每个分组元素选择随机的非连续日期?

2024-05-03

我目前正在尝试为每个分组列选择非连续日期。

换句话说,我有以下数据框:

我基本上想group_by(Site)然后为每个分组站点仅保留 3 个随机非连续日期。例如,如果 HP37P1B 的日期对应于 3 月 12 日、3 月 13 日、3 月 14 日和 3 月 7 日 - 我需要一个仅包含以下内容的数据框(例如):

HP37P1B 12th March

HP37P1B 14th March

HP37P1B 7th March

到目前为止,我已经尝试了一些使用 stackoverflow 的帖子diff(), ave(),以及lubridate包,但我还没有取得任何成功。

EDIT

根据下面的评论,我试图使这个问题可重现

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 个日期,我们就将其保留。


请检查是否达到目的?实际上,根据提供的标准选择最大可能的日期很困难(至少对我来说)。我们可以通过以下策略识别连续和非连续组中的日期。但请考虑一组(例如 3 个连续日期)中的两个场景。如果random样本包含 2 个单元,这些单元可以是连续的,也可以是非连续的。假设如果我们进一步选择奇数 (2) 或偶数 (1) 行,那么在我看来,样本将是判断性的而不是随机的。这是采取的策略——

  • 将数据分组
  • 通过各组分别进行操作purrr::map_df最后一行绑定数据
  • 将数据(现在为组)分为连续日期和非连续日期(每个连续日期将位于其自己的组中)。从每个组中选择唯一的行。
  • 最后从每一行中选择三个(或根据小组结果更少)。
library(tidyverse)

df %>% 
  ungroup() %>% 
  group_split(Site) %>% 
  map_df(., ~ .x %>% ungroup() %>%
        arrange(Date) %>%
        mutate(n = 1) %>%
        complete(Date = seq.Date(first(Date), last(Date), by = 'days')) %>%
        group_by(n = cumsum(is.na(n))) %>%
        filter(!is.na(Site)) %>%
        sample_n(1) %>%
        ungroup() %>%
        sample_n(min(n(), 3))) %>%
  select(-n)

# A tibble: 86 x 2
   Date       Site   
   <date>     <chr>  
 1 2020-03-04 HP36P1B
 2 2020-03-04 HP36P3B
 3 2020-03-04 HP36P4B
 4 2020-03-07 HP37P1B
 5 2020-03-12 HP37P1B
 6 2020-03-07 HP37P2B
 7 2020-03-12 HP37P2B
 8 2020-03-07 HP37P4B
 9 2020-03-12 HP37P4B
10 2020-03-04 HP4008R
# ... with 76 more rows

注意:您的 dput 已分组,因此我必须添加ungroup()在代码的第二行,您可以将其删除

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何为每个分组元素选择随机的非连续日期? 的相关文章

  • 如何在 R 中的 for 循环内将值存储在向量中

    我正在开始使用 R 但我对以下问题感到非常沮丧 我试图将 for 循环内完成的某些计算的值存储到我之前定义的向量中 问题是如何进行索引 因为for循环迭代代码的次数取决于用户的输入 所以变量i不一定要从1开始 它可以从80开始 for举个例
  • `dplyr::_join` 函数的命名向量“by”参数[重复]

    这个问题在这里已经有答案了 我正在写一个函数dplyr join两个数据框by不同的列 第一个数据帧的列名称动态指定为函数参数 我相信我需要使用rlang准引用 元编程 但未能找到可行的解决方案 我很感激任何建议 library dplyr
  • R ggplot 中的柯尔莫哥洛夫-斯米尔诺夫图

    我正在尝试在 r 中绘制 KS 图 一切似乎都很顺利 除了我只能使用颜色来可视化两个不同的样本而不是线型这一事实 我已经尝试过以下方法 sample1 lt SD13009 sample2 lt SD13009PB group lt c r
  • 更新 R6 对象实例中的方法定义

    如何更新 R6 类实例的方法定义 正如我所期望的 S3 使用当前的方法定义 对于 R5 参考类 我可以使用 myInstance myInstance copy 在 R6 中 我尝试了 myInstance myInstance clone
  • sapply - 保留列名称

    我试图总结数据集中许多不同列 变量 的平均值 标准差等 我已经编写了自己的汇总函数 以准确返回我需要和正在使用的内容sapply立即将此函数应用于所有变量 它工作正常 但是返回的数据帧没有列名 我似乎甚至无法使用列号引用重命名它们 也就是说
  • 闪亮的应用程序包:css 和所有 www/ 目录内容

    我正在尝试将 Shiny 应用程序转换为 R 包 但我在处理有关 www 目录以及 松散 文件的所有问题时遇到了问题 我闪亮的应用程序运行得很好 但是当我尝试 打包它 时 它不起作用 我闪亮的应用程序目录 my shiny app R ut
  • 在r中的某个阈值处破坏 cumsum() 函数

    例如我有以下代码 cumsum 1 100 我想打破它 如果一个元素 i 1 大于3000 我怎样才能做到这一点 因此 而不是这个结果 1 1 3 6 10 15 21 28 36 45 55 66 78 91 105 120 136 15
  • 在ggplot中设置y轴中断

    我在代码中设置中断时遇到困难 我尝试添加breaks seq 0 100 by 20 但似乎无法让它正常工作 本质上我希望 Y 轴从 0 到 100 每 20 个刻度一次 YearlyCI lt read table header T te
  • 为什么这个 R ggplot2 代码会显示一个空白的显示设备?

    虽然 SO 通常不用于帮助解决错误 但这个显示了特别简单且特别烦人的行为 如果你是一个ggplot2用户 您可以在 10 秒或更短的时间内重现它 正如这个 GitHub 问题 ggplot gtable 创建空白显示 https githu
  • R:按组,测试一个变量的每个值是否存在于另一个变量中

    我有一个数据框架 结构如下 a lt c 1 1 1 2 2 2 3 3 3 3 4 4 b lt c 1 2 3 1 2 3 1 2 3 4 1 2 c lt c NA NA 2 NA 1 1 NA NA 1 1 NA NA df lt
  • 要在子集中显示的非数字条目的维恩图

    我有以下数据框 SET1 SET2 SET3 par1 par2 par1 par2 par3 par2 par3 par4 par5 我想制作一个维恩图 其中所有这些 parX 元素都显示在各自的子集中 即作为标签 而不仅仅是重叠元素的数
  • 当设置 coord_fixed 时,ggplot/shiny 中的鼠标悬停坐标是错误的

    我正在使用问题中的答案 当您将鼠标悬停在闪亮的 ggplot 上时出现工具提示 https stackoverflow com questions 27965931 tooltip when you mouseover a ggplot o
  • 如何根据 ggplot2 中的汇总数据创建堆积条形图

    我正在尝试使用 ggplot 2 创建堆积条形图 我的宽格式数据如下所示 每个单元格中的数字是响应的频率 activity yes no dontknow Social events 27 3 3 Academic skills works
  • 使用点阵个性化 R 上显示的 X 轴值

    我收集了大量包含日期 客户端及其 NFS 使用情况的数据 我正在使用lattice R包进行绘图 正如对超级用户的建议 https superuser com questions 523195 plot custom log data on
  • 扩展数据框以使其具有与原始行中两列的范围一样多的行[重复]

    这个问题在这里已经有答案了 我有一个数据框如下 structure list symbol c u n v i a start c 9L 6L 10L 8L 7L end c 14L 15L 12L 13L 11L Names c symb
  • StatET调试工具

    我想我只是很密集 但我似乎无法弄清楚如何在 Eclipse 中的 R 中使用调试工具 StatET 插件 有人有关于这个主题的任何提示或教程吗 StatET 2 00 现在对高级 可视化调试提供实验性支持 需要 Eclipse 3 6 或
  • 无法将“gather”输出的列名称更改为默认名称以外的任何名称

    我正在尝试使用gather in the tidyr包 但我无法更改默认名称的输出列名称 例如 df data frame time 1 100 a 1 100 b 101 200 df long df gt gather foo bar
  • ggplot2:带有 geom_line 的 x 轴因子不起作用

    我想要一个线图 其中value绘制为函数expt每级一行var 这是我的数据 lines lt expt var value 1 none p 0 183065327746799 2 none p 0 254234138384241 3 n
  • 将 Excel 文件读入 R 并锁定单元格

    我有一个 Excel 电子表格要读入 R 它受密码保护并锁定了单元格 我可以使用 excel link 导入受密码保护的文件 但我不知道如何解锁 取消保护单元格 excel link 给了我这个错误 gt
  • 如何在R中分离两个图?

    每当我运行这段代码时 第一个图就会简单地覆盖前一个图 R中有没有办法分开得到两个图 plot pc title main abc xlab xx ylab yy plot pcs title main sdf xlab sdf ylab x

随机推荐

  • 如何启动 java-web-start 应用程序并等待其退出?

    我刚刚发现javaws wait没有做 Windows 上应该做的事情 它将在应用程序完成之前返回 这个 bug 已经存在 5 年多了 并且已关闭 无法修复6281477 https bugs java com bugdatabase vi
  • 如何在 ubuntu 上的 emacs 中运行 shell 命令,同时避免 bash 作业控制错误?

    我在 ubuntu 中安装了 emacs 使用 sudo apt get install emacs 我遇到的问题是 当我尝试从 emacs 中运行 shell 命令时 例如M ls 输出之前是这样的 bash cannot set ter
  • 使用外源数据进行 SARIMAX 样本外预测

    我正在使用 SARIMAX 进行时间序列分析 并且一直在努力解决这个问题 我想我已经成功地拟合了一个模型并用它来进行预测 但是 我不知道如何利用外源数据进行样本预测 我可能做错了整个事情 所以我在下面包含了我的步骤和一些示例数据 impor
  • 如何使用 JDBC 将大型(或至少是重要的)BLOB 放入 Oracle 中?

    我正在开发一个应用程序来执行一些批处理 并且希望将输入和输出数据作为文件存储在 Oracle 数据库的 BLOB 字段中 Oracle版本是10g r2 使用如下的PreparedStatement setBinaryStream 方法会将
  • 应用程序包包含本机代码,我找不到调试符号 .zip

    这是关于 PlayStore 警告调试符号 添加行到 build gradle app 后我已成功构建 Gradle android buildTypes release ndk debugSymbolLevel FULL 但遵循指示htt
  • 使用 Mongoose 多次查询,无需嵌套

    我正在尝试使用 node js 生成一个文档 该文档需要从 mongo 数据库运行多个不相关的数据库查询 这是我当前的代码 Data find function err results if err return next err fini
  • Pandas:了解操作何时影响原始数据帧

    我喜欢 pandas 并且已经使用它很多年了 并且非常有信心我能够很好地掌握如何对数据帧进行子集化并适当地处理视图与副本 尽管我使用了很多断言来确保 我还知道有很多关于SettingWithCopyWarning的问题 例如如何处理Pand
  • Spring中的ApplicationContext导入

    我正在从本教程学习 Spring http courses caveofprogramming com courses the java spring tutorial lectures 38024 http courses caveofp
  • tkinter 应用程序中的 super()

    我无法理解这个错误 在下面的代码中 当我使用tk Frame一切都按预期进行 但是如果我使用super 我被抛出了AttributeError 应用程序对象没有属性 tk class Application tk Frame def ini
  • WPF 与分辨率无关

    如果我将所有内容放入 viewbox 容器中 那么我的 wpf 应用程序将与分辨率无关 或者我需要执行其他操作吗 请帮助概念 根据可用屏幕或中等尺寸缩放 元素如果您希望始终填充屏幕或输出设备的某些空间 而与指标无关 那么使用视图框是一个不错
  • 如何忽略“类型实例化过深且可能无限。ts(2589)”打字稿错误?

    更新到 Typescript 3 5 后 我收到很多 类型实例化过深 可能是无限的 ts 2589 错误 我怎么能忽视他们呢 代码发生的地方 使用TypeORM https typeorm io import Connection Repo
  • 静态类属性上的 isset

    class A public static foo 42 class A attribute foo var dump isset class attribute gives bool false 我如何检查这个类中是否存在这个静态属性 U
  • html() 与 innerHTML jquery/javascript 和 XSS 攻击

    我正在对我自己的代码测试 xss 攻击 下面的示例是一个简单的框 用户可以在其中输入他想要的任何内容 按 测试 后按钮 JS 会将输入字符串显示为两个 div 这是我为了更好地解释我的问题而制作的示例
  • 使用 SimpleHTTPServer 进行单元测试

    我正在编写一个 Python 模块 它封装了某个 Web 服务 API 这一切都是 REST 因此实施起来相对简单 然而 在单元测试方面我发现了一个问题 由于我不运行我为其创建此模块的服务 我不想对它们进行锤击 但同时 我需要检索数据来运行
  • MKMapView 未在平移上调用 RegionDidChangeAnimated

    我有一个带有 MKMapView 的应用程序和每次地图更改位置 在 RegionDidChangeAnimated 中 时调用的代码 当应用程序最初加载时 在显式更新地图坐标的平移 滑动 捏合 点击和按钮上调用regionDidChange
  • 如何从 MP3 文件中提取元数据?

    我已经得到了 MP3 文件的文件名 如何从该 MP3 文件中提取元数据 例如艺术家 专辑 专辑图像等 对于 API 级别 10 或更高级别尝试此操作 MediaMetadataRetriever mmr new MediaMetadataR
  • smtplib.SMTPAuthenticationError: (534, b'5.7.9 需要应用程序特定的密码

    smtplib SMTPAuthenticationError 534 b 5 7 9 需要应用程序特定的密码 了解更多信息 n5 7 9https support google com mail p InvalidSecondFactor
  • Spring Boot处理实体继承

    我正在处理这个tutorial http blog netgloo com 2014 12 18 handling entities inheritance with spring data jpa 处理实体继承 我有扩展用户实体的个人和公
  • 如何获取 datetimepicker c# winform 选中/未选中事件

    winforms net的datetimepicker控件中有一个复选框 但我找不到选中或取消选中复选框时触发的事件 有出路吗 但是它确实会触发值更改事件
  • 如何为每个分组元素选择随机的非连续日期?

    我目前正在尝试为每个分组列选择非连续日期 换句话说 我有以下数据框 我基本上想group by Site 然后为每个分组站点仅保留 3 个随机非连续日期 例如 如果 HP37P1B 的日期对应于 3 月 12 日 3 月 13 日 3 月