如何在R中获取具有特殊条件的随机行

时间:2019-03-08 08:43:44

标签: r

您好,如何获得2个特殊条件的随机行。下面的示例是日期,我想获得任意年份的2个日期的随机样本,但月份和日期为12/31。就像“ XXXX1231”。

> dateDS
    dateDS
1 20121231
2 20131020
3 20140819
4 20151231
5 20161231
6 20171106
7 20131231

我想获得一个随机样本,该样本将输出2个日期(“ XXXX1231”)

> dateSample
    dateSample
1 20121231
2 20131231

2 个答案:

答案 0 :(得分:4)

使用grep的一种方法是找到以“ 1231”结尾的日期索引,然后将其子集化。

df[sample(grep("1231$", df$dateDS), 2), ,drop = FALSE]

#    dateDS
#5 20161231
#4 20151231

或者,如果您只想获取那些日期的值并且不想子集化

sample(grep("1231$", df$dateDS, value = TRUE), 2)
#[1] "20151231" "20161231"

另一种选择,将dateDS转换为实际的日期提取月份和日期,并随机选择其中带有“ 1231”的两个值。

df$dateDS[sample(which(format(as.Date(as.character(df$dateDS), "%Y%m%d"), "%m%d") == "1231"), 2)]

答案 1 :(得分:1)

另一个带有substr()的选项,以便仅选择带有1231的日期,然后选择sample两行:

d <- read.table(text="dateDS
20121231
                20131020
                20140819
                20151231
                20161231
                20171106
                20131231", header=T)

d$md <- substr(d$dateDS, 5, 8) # use md to select only "1231"
d <- d[d$md==1231, ]
# d    ateDS   md
# 1 20121231 1231
# 4 20151231 1231
# 5 20161231 1231
# 7 20131231 1231
d[sample(2), -2]
#[1] 20151231 20121231
相关问题