【问题标题】:subset random quarter time data from a lubridate dataset子集来自 lubridate 数据集的随机季度时间数据
【发布时间】:2017-05-13 07:59:33
【问题描述】:

如何使用 match() 函数生成随机季度(如 Jan、Feb、March)并选择数据的子集:对应于生成的随机季度和第一列和第三列的行。

假设我们有一个 12 行 3 列的时间数据,如下所示:

      dates     strings    numbers
1  2017-01-31       S       5
2  2017-02-28       T       1
3  2017-03-31       C       8
4  2017-04-30       Q       2
5  2017-05-31       D       6
6  2017-06-30       X      12
7  2017-07-31       N      10
8  2017-08-31       Y       9
9  2017-09-30       P      11
10 2017-10-31       G       4
11 2017-11-30       F       7
12 2017-12-31       R       3

我的意思是很容易在数据集中随机选择 3 行,并且只选择第 1 列和第 3 列的子集。像这样,

df[sample(nrow(df), 3),c("dates","numbers")]

因此,我有,

        dates    numbers
5  2017-05-31       1
9  2017-09-30       4
11 2017-11-30      12

但是如何通过使用 match() 来实现这样的随机财政季度,

        dates    numbers
1  2017-01-31       5
2  2017-02-28       1
3  2017-03-30       8

【问题讨论】:

    标签: r random lubridate


    【解决方案1】:

    也许这有帮助

    library(zoo)
    library(tidyverse)
    df %>% 
       group_by(qtr = format(as.yearqtr(dates), 'Q%q')) %>% 
       select(-strings) %>%
       sample_n(1) %>% 
       ungroup() %>% 
       sample_n(3) %>% 
       select(-qtr)
    

    【讨论】:

    • 它呈现这样的日期数字 1 2017-01-31 2 6 2017-06-30 7 10 2017-10-31 9
    • @xxyyzz 根据你的预期输出,不清楚你在找什么
    • 对这种混乱感到抱歉。我想我试图实现的是让子集随机成为四分之一(1,2,3 或 4,5,6 或 7,8,9 或 10,11,12)
    • 日期与三个连续数字中的行匹配(1、2、3 或 4、5、6 或 7、8、9 或 10、11、12)
    • @xxyyzz 不清楚。您从其中一个季度中随机说出子集,而我做到了。现在,你说的是不同的东西
    猜你喜欢
    • 2020-09-04
    • 2014-08-09
    • 2014-08-11
    • 2012-03-26
    • 2017-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-27
    相关资源
    最近更新 更多