Я в основном пытаюсь создать столбец на основе сопоставления между несколькими столбцами в паре больших таблиц данных.Таблица данных 1 имеет три столбца, включая article_id (уникальный номер), publ_at (время) и site (символ):
article_id published_at site
142605 7/26/18 15:40 X
142120 7/20/18 16:12 Y
141633 7/14/18 18:38 X
141538 7/14/18 20:10 X
141135 7/8/18 20:16 Z
140453 7/1/18 19:49 Z
139667 6/19/18 9:45 Z
139237 6/12/18 16:52 Z
138755 6/5/18 17:29 A
Таблица данных 2 имеет только столбец, который представляет информацию о времени, например:
started_at
7/27/18
7/21/18
7/15/18
7/16/18
7/9/18
7/1/18
6/20/18
6/13/18
6/7/18
Цель состоит в том, чтобы подсчитать количество статей в таблице данных 1 на основе пары условий, в которых я объявлю временное окно и интересующий сайт: (1) все «publised_at» в пределахза n дней до "start_at" (например, если я установлю n = 1, для первой строки в таблице данных 2 в таблице данных 2 будет учитываться только 1 день до 27/27/18;только 7/26/18 является приемлемой целью, также, если я установлю n = 3, будут рассматриваться данные в течение 3-х дней до даты, в этом случае, для 7/27/18, только данные от 7/24 /С 18 по 26 июля 1818 г. в таблице данных 1) и (2) объявленный мной «сайт» (например, если я хочу посчитать количество случаев за 3 дня до 27 июля 18 г. только всайт X, то он должен посчитать количество строк с X в столбце сайта и опубликован с 24.07.18 по 26.07.18в таблице данных 1).Обратите внимание, что длина таблиц 1 и 2 также различна, и в start_at в таблице 2 должно быть много дубликатов, но мне нужно сохранить их все как есть.
В представленном игрушечном примере мне бы хотелосьчтобы в конечном итоге иметь с n = 1 и site = X:
started_at count_x
7/27/18 1
7/21/18 0
7/15/18 2
7/16/18 0
7/9/18 0
7/1/18 0
6/20/18 0
6/13/18 0
6/7/18 0
И с n = 3 и site = X:
started_at count_x
7/27/18 1
7/21/18 0
7/15/18 2
7/16/18 2
7/9/18 0
7/1/18 0
6/20/18 0
6/13/18 0
6/7/18 0
Чтобы решить эту проблему, я написалкод, использующий цикл for, но он очень медленный и, кажется, вообще неосуществим.
for (i in 1:nrow(table_2)) {
n = nrow(table_1[as.Date(table_1$published_at, "%m/%d/%y")
== as.Date(table_2$started_at[i], "%m/%d/%y")-1
& table_1$site == "X",])
table_2$count_x1[i] = n
}
Я сильно чувствую, что операции с данными.таблицы могут сделать это очень быстро, но я не уверен, что можетбыть правильным подходом ....