Итерационный метод для присвоения значений новой переменной на основе значений ранее существующей переменной в R - PullRequest
0 голосов
/ 16 июня 2019

Я пытаюсь создать новую переменную «Timeelapsed», которая измеряет количество времени, прошедшее с начала исследования для каждого наблюдения - эта новая переменная основана на ранее существовавшей переменной «Year».

Я создал программу, которая выводит правильное количество лет, прошедших с начала исследования для каждого наблюдения. Однако этот код неэффективен и использует повторные операторы if. Я пытался использовать вложенные циклы for / if, чтобы сделать код более эффективным, но ни одна из моих новых программ не работает должным образом. Буду признателен за помощь в повышении эффективности моего кода.

Рабочий код:

Timeelasped <- rep(NA, length((data$Year)))

for (i in 1:nrow(data)) {
  if(data$Year[i]==2007) {
    Timeelasped[i] <- 0
  }
  if(data$Year[i]==2008) {
    Timeelasped[i] <- 1
  }
  if(data$Year[i]==2009) {
    Timeelasped[i] <- 2
  }
}

Токовый выход:

TimeElapsed 0 0 0 0 1 1 1 1 2 2 2 2

1 Ответ

0 голосов
/ 16 июня 2019

Если год - это просто числовое значение (вы получаете TRUE, когда пишете is.numeric(data1[,'year'])?) Для наблюдения, а не объект даты / времени, тогда это будет работать, не нужно ничего сложного!

# dummy data
data1 <- data.frame('year' = c(2007, 2008, 2008, 2009))

# solution 
data1[,'elapsed'] <- data1[,'year'] - 2007

Выход:

  year elapsed
1 2007       0
2 2008       1
3 2008       1
4 2009       2  

Если это дата / время, тогда посмотрите на функцию difftime

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