как посчитать количество событий на одном data.frame на основе периода времени на другом data.frame

Вы можете загружать данные:

Загрузка данных в BigQuery с Google Диска в настоящее время не поддерживается, но вы можете запрашивать данные в Google Привод с использованием внешней таблицы .

Вы можете загружать данные в новую таблицу или раздел, вы можете добавлять данные в существующую таблицу или раздел, или вы можете перезаписать таблицу или раздел , Дополнительные сведения о работе с разделами см. В разделе Управление разделенными таблицами .

Когда вы загружаете данные в BigQuery, вы можете предоставить схему таблицы или раздела или для поддерживаемых форматов данных, может использовать автоматическое обнаружение схемы .

Каждый метод выполняется быстро, если ваши данные велики, вы должны пойти с облачным хранилищем Google.

Когда вы загружаете данные из облачного хранилища Google в BigQuery, ваши данные могут быть в любом из следующих форматов:

1
задан Dave2e 19 January 2019 в 21:26
поделиться

1 ответ

Вот решение с базой R с использованием некоторых методов dplyr. Это не самое чистое и лучшее решение, но оно должно решить вашу проблему.

df<-structure(list(ID = c(1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L), 
DATE = structure(c(11323, 11354, 11396, 11432, 11471, 11444, 
11383, 11404, 11416, 11447), class = "Date"), DRUG = structure(c(1L, 
1L, 2L, 3L, 1L, 2L, 1L, 3L, 4L, 2L), .Label = c("A", "B", 
"C", "D"), class = "factor")), row.names = c(NA, -10L), class = "data.frame")
#Note DATE was converted to a Date object with the following line
#df$DATE<-as.Date(df$DATE, "%m/%d/%Y")

date.event<-read.table(header=TRUE, text="ID  date.event
1   1/20/2001
1   4/11/2001
2   3/1/2001")
date.event$date.event<-as.Date(date.event$date.event, "%m/%d/%Y")

library(dplyr)
#calculate the prev_drup by counting the number of unique drugs
df<-df %>% group_by(ID)  %>%  mutate(prev_drug= (cumsum(!duplicated(DRUG)))-1)


#loop through each row after spitting and filtering by ID
event.30d.prior<-sapply(1:nrow(df),  function(i){
       events<-date.event[date.event$ID==df$ID[i], "date.event"]
       sum(between(events, df$DATE[i]-30, df$DATE[i]))
})

finalanswer<-cbind(df, event.30d.prior=unlist(event.30d.prior))
0
ответ дан Dave2e 19 January 2019 в 21:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: