#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), ]