Ich fange gerade an, R zu lernen, was wirklich nützlich war, und ich versuche es zu verwenden, um den Anteil der Tage zu berechnen, die abgedeckt sind. Diese Messgröße hat mit der Messung der Einhaltung der Medikation durch eine Person zu tun. Im Grunde genommen finden Sie für einen bestimmten Zeitraum alle Füllungen eines Medikaments anhand des Fülldatums und der Anzahl der Tage in der Lieferung, um festzustellen, für welche Tage sie abgedeckt waren. Z.B. Wenn eine Person am 01.02.2016 eine 35-tägige Befüllung erhält, hat sie eine Deckung vom 01.02.16 bis zum 06.06.2016. Leicht genug.PDC-Berechnung in R - Entfernen von Schleifen
Dies wird schwierig, wenn sie für eine Füllung zurückgehen, bevor sie aus der Deckung bei der ersten Füllung, Sie nicht doppelt zählen Tage (zB die Person erhält ihre zweite Füllung am 01.03.2016, 3/1 -3/6 werden nur einmal gezählt).
Ich habe tatsächlich etwas Code geschrieben, der richtig zu funktionieren scheint, aber seine Verwendung von FOR-Schleifen, die ich gelernt habe, funktionieren nicht gut in R und ich mache mir Sorgen, wenn ich anfange, einen Haufen zu werfen Daten bei ihm.
Hier ist der erste Teil des Codes, der einige Variablen, die Testdaten und initialisiert baut:
#Create test data vectors
Person <- c(rep("Person1",12),rep("Person2",9))
FillDate <- c("2016-1-1", "2016-2-1", "2016-3-1", "2016-4-1", "2016-5-1", "2016-6-1", "2016-7-1", "2016-8-1", "2016-9-1", "2016-10-1", "2016-11-1", "2016-12-1", "2016-2-1", "2016-3-1", "2016-4-20", "2016-5-1", "2016-6-1", "2016-7-1", "2016-8-1", "2016-9-1", "2016-10-1")
DaysSupply <- c(rep("35", 14), "20", "5", "20", rep("35", 4))
#Build into data.frame
PDCTestData <- cbind.data.frame(as.factor(Person),as.Date(FillDate,"%Y-%m-%d"),as.numeric(DaysSupply))
colnames(PDCTestData) <- c("Person","FillDate","DaysSupply")
#Create start and end dates for overall period
StartDate <- as.Date("2016-01-01")
EndDate <- as.Date("2016-12-31")
#Initialize DaysCoveredList, a vector to hold the list of dates that a person has drug coverage
DaysCoveredList <- NULL
#Initialize DaysCoveredTable, a matrix to count the total number of unique days in the DaysCovered List, by person
DaysCoveredTable <- NULL
und der zweite Teil, der die eigentliche Arbeit macht:
#Begin looping through individuals
for(p in levels(PDCTestData$Person)){
#Begin looping through drug fills
for(DrugSpan in 1:nrow(PDCTestData[PDCTestData$Person == p,])){
#Create a sequence of the dates covered by that fill, the sequence starts on the fill date and runs for the number of days in Days Supply, Builds a list of all days covered for that person
DaysCoveredList <- c(DaysCoveredList,seq.Date(from = PDCTestData[PDCTestData$Person == p,][DrugSpan,]$FillDate, length.out = PDCTestData[PDCTestData$Person == p,][DrugSpan,]$DaysSupply, by = "day"))
} #Exit drug fill loop
#Counts the number of unique days covered from the DaysCovredList, with in the start and end of the overall period
DaysCovered <- length(unique(DaysCoveredList[DaysCoveredList >= StartDate & DaysCoveredList <= EndDate]))
#Adds the unique count from DaysCovered to the summary DaysCoveredTable
DaysCoveredTable <- rbind(DaysCoveredTable,cbind(p,DaysCovered))
#Clear DaysCovered and DaysCovredList
DaysCovered <- NULL
DaysCoveredList <- NULL
} #Exit the individual loop
Jede Ihnen helfen können Angebot wird geschätzt.
Danke.
Bevor Sie davon ausgehen, dass Sie Ihre kostbare Zeit für die Optimierung aufwenden müssen, versuchen Sie es doch einmal mit einer Million Zeilen (oder wie viele Sie auch bewältigen müssen) und sehen Sie, ob es langsam ist? Tun Sie einfach 'PDCTestData <- PDCTestData [rep (1:21, 100000),]' und sehen Sie, was passiert. – dash2