Как подмножить df вектором дат и получить все совпадающие данные?

#r

#r

Вопрос:

Я пытаюсь подмножить свои базы данных df на совпадающие даты. У меня есть нужные даты в формате date. Дата в моем df находится в том же формате. Когда я пробую свой код, я получаю только первую строку, соответствующую подмножеству, и на дату может быть 20 совпадающих строк.

Я попытался использовать подмножество с логическим поиском в df, соответствующим вектору

 subset.met=subset(hr.met, hr.met$date == dates)
  

Это мой df

 1 2018-12-20 07:00:00 NA 984.3140 4.7425 4.240365 203.2252
2 2018-12-20 08:00:00 NA 986.6738 2.6975 2.036287 175.7522
3 2018-12-20 09:00:00 NA 988.1152 3.7025 3.411026 212.9876
4 2018-12-20 10:00:00 NA 989.2403 3.7700 3.297027 216.7082
5 2018-12-20 11:00:00 NA 990.4552 4.0250 3.511919 225.3250
6 2018-12-20 12:00:00 NA 990.5790 3.7175 3.317329 222.5587
       dwd t2 rh sat vp h2o       date
1 24.77761 NA NA  NA NA  NA 2018-12-20
2 41.94633 NA NA  NA NA  NA 2018-12-20
3 21.79864 NA NA  NA NA  NA 2018-12-20
4 28.37998 NA NA  NA NA  NA 2018-12-20
5 27.86019 NA NA  NA NA  NA 2018-12-20
6 25.02467 NA NA  NA NA  NA 2018-12-20
  

Это мой вектор дат

 "2019-02-06" "2019-02-07" "2019-02-08" "2019-02-11" "2019-02-12" "2019-02-13" "2019-02-15" "2019-02-16" "2019-02-17" "2019-02-18"
"2019-02-20" "2019-02-21" "2019-02-26" "2019-02-27" "2019-02-28" "2019-03-01" "2019-03-02" "2019-03-03" "2019-03-04" "2019-03-05"
"2019-03-12" "2019-03-13" "2019-03-14" "2019-03-15" "2019-03-16" "2019-03-17" "2019-03-19"
  

Это то, что я получаю

 1004 2019-01-31 02:00:00       NA  990.8791 2.880833 2.716300
1042 2019-02-01 16:00:00       NA 1001.9768 1.759167 1.652109
1081 2019-02-03 07:00:00       NA  994.9080 3.465000 3.127165
1119 2019-02-04 21:00:00       NA  997.8129 3.465000 3.115460
1158 2019-02-06 12:00:00 296.4433  999.6472 2.322500 2.196016
1197 2019-02-08 03:00:00 306.4103  987.3516 2.096667 1.946248
            wd      dwd       t2       rh      sat       vp
1004  16.40826 18.24759       NA       NA       NA       NA
1042 213.26311 17.81623       NA       NA       NA       NA
1081  29.44621 24.45101       NA       NA       NA       NA
1119 203.37526 24.97175       NA       NA       NA       NA
1158  25.21708 17.95901 297.0304 82.88533 29.61701 24.54474
1197  27.73385 20.24611 306.8247 39.54208 52.31900 20.19168
          h2o       date
1004       NA 2019-01-31
1042       NA 2019-02-01
1081       NA 2019-02-03
1119       NA 2019-02-04
1158 993.8726 2019-02-06
1197 791.6034 2019-02-08
  

Если вы видите, я получаю только первую совпадающую строку каждой даты, и мне нужны все строки.

Комментарии:

1. используйте %in% , subset.met=subset(hr.met, date %in% dates)

Ответ №1:

Вы можете создать логический вектор, который проверяет, присутствуют ли dates , как показано ниже:

 hr.met$date %in% dates
grepl(dates, hr.met$date)
  

А затем подмножество, используя этот вектор, например:

 subset(hr.met, date %in% dates)
dplyr::filter(hr.met, date %in% dates)
hr.met[grepl(dates, hr.met$date), ]