Как получить случайные строки со специальным условием в R - PullRequest
0 голосов
/ 08 марта 2019

Здравствуйте, как мне получить 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 ]

4 голосов
/ 08 марта 2019

В одну сторону, используя 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 голос
/ 08 марта 2019

Другой вариант с 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...