您好,如何获得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
答案 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