Как исправить ошибку «Ошибка в if (p_change [j] == dat [i, 1]) {: пропущенное значение, где требуется TRUE / FALSE» в цикле? - PullRequest
0 голосов
/ 31 марта 2019

Я новичок в R. Я запускаю цикл, который в основном сравнивает значения, содержащиеся в векторе ( p_change ), со значениями в столбце фрейма данных ( dat ), столбец IndicatorID , более конкретно).В случае, если IndicatorID и число в p_change совпадают, я хочу, чтобы значение в стандартизированном было вычтено на единицу (в той же строке).Это пример вектора ( p_change ):

p_change <- c(30101,92901,92031,90630,90282,10401)

Кадр данных ( dat ), с которым он сравнивается, выглядит следующим образом:

IndicatorID IndicatorName                                          AreaName             standardised variance
        <int> <chr>                                                  <chr>                       <dbl>    <dbl>
1       10401 1.04 - First time entrants to the youth justice system Hartlepool                  0.601   13478.
2       10401 1.04 - First time entrants to the youth justice system Middlesbrough               0.481   13478.
3       10401 1.04 - First time entrants to the youth justice system Redcar and Cleveland        0.773   13478.
4       10401 1.04 - First time entrants to the youth justice system Stockton-on-Tees            0.732   13478.
5       10401 1.04 - First time entrants to the youth justice system Darlington                  0.545   13478.
6       10401 1.04 - First time entrants to the youth justice system Halton                      0.353   13478.

Цикл for, который я запускаю, таков:

for (i in 1:nrow(dat)) {
  for (j in 1:length(p_change)) {
    if (p_change[j]==dat[i,1]) {
      dat[i,4] <- 1-dat[i,4] # Subtraction of a unit (polarity change)
    } else {
      i = i+1
    }
  }
}

Однако после его запуска выдается следующая ошибка 'Ошибка в if (p_change [j] == dat[i, 1]) {: пропущенное значение там, где требуется TRUE / FALSE '.Мне было интересно, если вы заметили ошибку, которая вызывает ошибку.Спасибо!

1 Ответ

0 голосов
/ 31 марта 2019

Неверно упорядочен цикл for. Во-первых, код должен зацикливаться на векторе, а затем на рассматриваемом фрейме данных.

for (i in 1:length(p_change)) {
  for (j in 1:nrow(dat)) {
    if (p_change[j]==dat[i,1]) {
      dat[i,4] <- 1-dat[i,4] # Subtraction of a unit (polarity change)
    } else {
      i = i+1
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...