Одна ошибка, с которой вы можете столкнуться в 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: более длинная длина объекта не кратна более короткой длине объекта