Сопоставить столбец с диапазоном двух столбцов таблицы цикла - PullRequest
0 голосов
/ 26 июня 2018

Я надеюсь, что на этот вопрос еще не ответили и что я ищу правильные термины (так как я не уверен, как выразить свои проблемы в нескольких словах).

Так что в основном у меня есть датафрейм со столбцом так называемых SIC-кодов. У меня также есть таблица поиска, которая классифицирует каждый SIC-код по определенной категории. Теперь я хочу сопоставить SIC-код с номером категории. Тем не менее, таблица соответствия предоставляет только диапазон для SIC-кодов, то есть строки содержат:

  1. классификационный номер
  2. самый низкий SIC-код для этой классификации
  3. самый высокий SIC-код для этой классификации.

Если у меня есть SIC-код, такой как 1111, но столбец 2 таблицы циклов равен 1000, а столбец 3 - 1500, простая функция сопоставления не будет работать. Я создал пример для лучшего понимания:

test <- as.data.frame(c(1012, 2010, 3545, 5550, 7068))
colnames(test) <- "SIC"
ind_num <- c(1, 3, 4, 5, 7, 10, 11, 12, 14, 15)
sic_low <-  c(0, 1010, 1012, 1050, 2000, 2005, 3500, 5550, 7050, 8000)
sic_high <- c(20, 1011, 1020, 1099, 2002, 2020, 3545, 5551, 7070, 8010)
LUPtable <- data.frame(ind_num, sic_low, sic_high)

test$new <- lapply(test$SIC, function(x) LUPtable$ind_num[match(x, LUPtable$sic_low)])

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

или похожие

test$new <- lapply(test$SIC, function(x) LUPtable$ind_num[x>=LUPtable$sic_low & x<=LUPtable$sic_high])
0 голосов
/ 26 июня 2018

Вы можете выполнить итерацию по каждому значению для проверки с помощью vapply() и получить индекс, между каким низким и высоким значениями он находится.

LUPtable$ind_num[vapply(test$SIC, function(x) which(x >= LUPtable$sic_low & x <= LUPtable$sic_high), numeric(1))]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...