Как я могу применить факторы к различным подмножествам большего временного ряда, используя пользовательскую функцию? - PullRequest
1 голос
/ 22 декабря 2011

Я измеряю физиологическую переменную с отметкой времени в миллисекундах для ряда пациентов. Для каждого пациента я хочу применить коэффициент к подмножеству рядов с метками времени, описывающих их положение в данный момент.

Я попытался создать следующую функцию, которая прекрасно работает при описании первой позы. При попытке применить следующий «фактор положения», ранее зарегистрированное положение удаляется.

TestPatient <- data.frame(Time=seq(c(ISOdatetime(2011,12,22,12,00,00)), by = "sec", length.out = 100),Value=rnorm(100, 9, 3))

patientpositionslice <- function(patient,positiontype,timestart,timestop) {
  patient$Position[
    format(patient$Time, "%Y-%m-%d %H:%M:%S") >= timestart &
    format(patient$Time, "%Y-%m-%d %H:%M:%S") <  timestop] <- positiontype
  patient
}

TestPatientNew <- patientpositionslice(TestPatient,"Horizontal","2011-12-22 12:00:05","2011-12-22 12:00:10")
TestPatientNew <- patientpositionslice(TestPatient,"Vertical","2011-12-22 12:00:15","2011-12-22 12:00:20")

Как изменить функцию, чтобы я мог применять ее несколько раз на одном и том же пациенте с различными положениями, такими как «Горизонтально», «Вертикально», «Сидеть» и т. Д .?

1 Ответ

1 голос
/ 22 декабря 2011

Вот ваше решение.Возможно, есть более элегантные способы, но это мое;)

 TestPatient <- data.frame(Time=seq(c(ISOdatetime(2011,12,22,12,00,00)), by = "sec",   length.out = 100),Value=rnorm(100, 9, 3))
 #Included column with position
 TestPatient$position <- NA

 patientpositionslice <- function(patient,positiontype,timestart,timestop) {
   #changed the test to ifelse() function
   new<-ifelse(
      format(patient$Time, "%Y-%m-%d %H:%M:%S") >= timestart &
      format(patient$Time, "%Y-%m-%d %H:%M:%S") <  timestop , positiontype, patient$position)
 patient$position <- new
 patient
 }

 TestPatientNew <- patientpositionslice(TestPatient,"Horizontal","2011-12-22 12:00:05","2011-12-22 12:00:10")
 #For repeated insertion use the previous object
 TestPatientNew <- patientpositionslice(TestPatientNew ,"Vertical","2011-12-22 12:00:15","2011-12-22 12:00:20")

Я прокомментировал изменения.Надеюсь, это так, как ты хотел, только поправь меня.

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