Как эффективно подсчитать количество наблюдений в таблице данных на основе некоторых операций, используя значения в нескольких столбцах другой таблицы в R? - PullRequest
0 голосов
/ 11 июня 2019

Я в основном пытаюсь создать столбец на основе сопоставления между несколькими столбцами в паре больших таблиц данных.Таблица данных 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
}

Я сильно чувствую, что операции с данными.таблицы могут сделать это очень быстро, но я не уверен, что можетбыть правильным подходом ....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...