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

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中移动窗口内的平均斜率

    我的数据集包含2个变量y 和 t 05s y 每 05 秒测量一次 我正在尝试计算移动中的平均坡度20秒窗口 即计算第一个 20 秒斜率值后 窗口向前移动一个时间单位 05 秒 并计算下一个 20 秒窗口 在以下位置生成连续 20 秒斜率值
  • 使用 pracma::findpeaks 识别持续峰值

    我的语法有问题peakpat内的选项findpeaks内的函数pramcaR 包 v 2 1 1 我使用的是 R 3 4 3 x64 Windows 我希望该函数能够识别可能有两个重复值的峰值 并且我相信该选项peakpat这就是我能做到的
  • 如何使用 usmap 标记数字而不是名称?

    我知道 usmap 有一个选项label in plot usmap 我想标记一些数字 而不是状态名称 我想 usmap 中应该有与州质心坐标相关的数据 但我不知道如何找到它 如果我能得到 坐标然后我可以用它来标记数字geom text 这
  • twitterR 和 ROAuth R 软件包安装

    我在安装 CRAN 上的 twitteR 和 RAOuth 软件包时遇到一些问题 我尝试了几种不同的方法 在 Windows 下使用源代码 在 Ubuntu 下使用 RStudio 我尝试了以下命令 sudo apt get install
  • 在 R 格子包中微调点图

    我正在尝试为不同的数据集和不同的算法绘制一堆 ROC 区域 我有三个变量 方案 指定所使用的算法 数据集 是正在测试算法的数据集 以及 Area under ROC 我正在 R 中使用lattice库 命令如下 点图 方案 Area und
  • Purrr::map_df() 删除 NULL 行

    使用时purrr map df 我偶尔会传递一个数据框列表 其中一些项目是NULL 当我做 map df 返回行数少于原始列表的数据框 我想发生的事情是这样的map df calls dplyr bind rows 它忽略了NULL价值观
  • 只读取选定的列

    谁能告诉我如何仅读取下面每年数据的前 6 个月 7 列 例如使用read table Year Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec 2009 41 27 25 31 31 39 2
  • ddply 和aggregate 之间的区别

    有人可以通过以下示例帮助我了解聚合和 ddply 之间的区别 数据框 mydat lt data frame first rpois 10 10 second rpois 10 10 third rpois 10 10 group c re
  • 文本挖掘 pdf 文件/词频问题

    我正在尝试挖掘一篇具有丰富 pdf 编码和图表的文章的 pdf 我注意到 当我挖掘一些 pdf 文档时 我得到的高频词是 phi taeoe toe sigma gamma 等 它与某些 pdf 文档配合良好 但与其他文档配合使用时却得到这
  • 如何获得所有大于x且有位置的数字?

    V lt c 1 3 2 4 2 3 1 X lt 3 pos lt V V X pos is 3 3 我需要的是所有 3 个的位置 I need 2 and 6 哪些职位是3 in V Use which pos lt which V 3
  • 如何在 R 中匹配多个 ggplot2 图中的调色板?

    自从被问到这个问题以来已经有一段时间了 但我知道一个事实 我很快就会提取新数据 我想弄清楚如何用这种技术来绘制它 看起来评论和答案中的人知道如何做到这一点 但我无法完全弄清楚所给我的内容 还有人想尝试一下吗 我正在尝试使用具有多个级别的因子
  • 纵向比较 R 中的值...并进行扭转

    我有许多人在多达四个时间段进行的测试结果 这是一个示例 dat lt structure list Participant ID c A A A A B B B B C C C C phase structure c 1L 2L 3L 4L
  • 如何从 R 读取 PDF 元数据

    我们很好奇 有没有一种方法可以从 R 读取 PDF 元数据 例如下面显示的信息 通过搜索我对此无能为力 r pdf metadata在当前的问题库中 非常欢迎任何指点 我想不出纯 R 的方法来执行此操作 但您可能可以安装您最喜欢的 PDF
  • read_html(url) 和 read_html(content(GET(url), "text")) 之间的区别

    我正在看这个很棒的答案 https stackoverflow com a 58211397 3502164 https stackoverflow com a 58211397 3502164 解决方案的开头包括 library httr
  • 删除极坐标图边缘的多余空间和圆环

    我有一个极坐标图ggplot2我已经非常接近完成 相当简单的情节 我已经能够在删除矩形边框方面获得帮助 但我不需要删除最后一个范围轮廓与带有方位角标签的绘图周围的环之间的额外空间 我希望该图的边界为 15 000 而不是 15 214 我编
  • SPSS 中的标准化残差与 R rstandard(lm()) 不匹配

    在寻找 R 相关解决方案时 我发现 R 和 SPSS 版本 24 在计算简单线性模型中的标准化残差方面存在一些不一致 看来SPSS所谓的标准化残差匹配 R学生化残差 我完全不认为某处存在软件错误 但显然这两个程序之间存在差异 看看这个例子
  • R:使用 tidyverse 将 NA 替换为 df 中的其他变量

    我想使用 tidyverse 替换 df 中的 NA 值 我想要的值应该从其他列中计算出来 input ID X1 X2 X3 A 0 96 NA 0 97 B 1 00 NA 1 01 C 0 98 0 03 NA A 1 00 NA 1
  • 如何绘制具有显着性水平的箱线图?

    前段时间问了一个关于绘制箱线图的问题Link1 https stackoverflow com questions 14604439 plot multiple boxplot in one graph 我有一些包含 3 个不同组 或标签
  • 如何修复 R 中 Kaplan Meier 图的风险表计算错误

    以下是一个数据帧 其中 6 个参与者中的每一个都有唯一的 record ID 我想绘制一个生存分析图 其中包含感兴趣事件的复发以及在时间间隔 tstart 到 tstop 内 暴露 药物剂量 数值变量 的时间依赖性协变量 每个参与者的最大
  • 麦当劳 omega:R 中的警告

    我正在计算几种不同尺度的欧米茄 并在 R 中使用不同的 omega 函数获取不同比例的不同警告消息 我的问题是如何解释这些警告以及报告检索到的 omega 统计数据是否安全 当我使用 从 alpha 到 omega 内部一致性估计普遍问题的

随机推荐

  • 如何启动 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 月