Эффективный способ замены вектора значений по второму вектору значений бинов в R

У меня есть вектор числовых значений (vals.to.convert в примере кода ниже), представляющий высоты (в метрах). Мне нужно заменить каждое значение на соответствующую метрику, связанную с 1-метровыми ячейками (данные в столбце "становится" в файле данных conversion.df ниже).

Прямо сейчас я использую cut() с conversion.df$becomes as.character() conversion.df$becomes как метки, а затем принуждает с as.character() и as.numeric() чтобы получить двоичное числовое преобразование.

Может ли кто-нибудь рекомендовать более эффективный и элегантный способ сделать это?

Например, с растром вы можете использовать raster::reclassify и data.frame, структурированный как conversion.df чтобы сделать замену.

Вот пример кода:

vals.to.convert <- sample(1:80, 500, replace = T)

conversion.df <- data.frame(from = 0:79,
 to = 1:80,
 becomes = runif(80))

converted <- as.numeric(as.character(cut(vals.to.convert, 0:nrow(conversion.df), labels = conversion.df$becomes)))
1 ответ

вы можете использовать findInterval

converted <- conversion.df$becomes[
 findInterval(vals.to.convert, conversion.df$from) - 1L]

или вырезать

converted <- conversion.df$becomes [cut(vals.to.convert, 0:80)]

licensed under cc by-sa 3.0 with attribution.