Как исправить: количество элементов для замены не кратно длине замены


Одна ошибка, с которой вы можете столкнуться в R:

Warning message:
 number of items to replace is not a multiple of replacement length

Эта ошибка возникает, когда вы пытаетесь заменить определенное количество элементов в столбце вектора или фрейма данных (допустим, 3 элемента) другим количеством элементов (допустим, 6 элементов).

В этом руководстве рассказывается, как именно исправить эту ошибку.

Как воспроизвести ошибку

Предположим, у нас есть следующий фрейм данных в R с некоторыми пропущенными значениями в первом столбце:

#create data frame
df <- data.frame(a=c(3, NA, 7, NA, NA, 14),
 b=c(4, 4, 5, 12, 13, 18))

#view data frame
df

 a b
1 3 4
2 NA 4
3 7 5
4 NA 12
5 NA 13
6 14 18

Теперь предположим, что мы пытаемся заменить отсутствующие значения в первом столбце значениями во втором столбце:

#attempt to replace missing values in first column with values in second column
df$a[is.na(df$a)] <- df$b

Warning message:
In df$a[is.na(df$a)] <- df$b :
 number of items to replace is not a multiple of replacement length

Мы получаем ошибку, потому что мы попытались заменить 3 пропущенных значения в первом столбце всеми 6 значениями из второго столбца.

Как исправить ошибку

Самый простой способ исправить эту ошибку — просто использовать оператор ifelse() :

#replace missing values in column 'a' with corresponding values in column 'b'
df$a <- ifelse(is.na(df$a), df$b, df$a)

#view updated data frame
df

 a b
1 3 4
2 4 4
3 7 5
4 12 12
5 13 13
6 14 18 

Этот оператор ifelse() проверяет, является ли значение в столбце «a» пустым. Если это так, то оно заменяется соответствующим значением в столбце «b», в противном случае оно остается в покое.

Другой способ исправить эту ошибку — просто заменить все отсутствующие значения определенным числом:

#replace all missing values in column 'a' with zero
df$a[is.na(df$a)] <- 0

#view updated data frame
df

 a b
1 3 4
2 0 4
3 7 5
4 0 12
5 0 13
6 14 18

Используя этот метод, каждое отсутствующее значение в столбце «а» заменяется нулем.

Дополнительные ресурсы

Как исправить в R: NA, представленные Coercion
Как исправить в R: нижний индекс выходит за пределы
Как исправить в R: более длинная длина объекта не кратна более короткой длине объекта

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.