Вы можете использовать %in%
:
metals <- c("10110","10410","10439")
stones <- c("14111","10421")
# ... and so on for each group
if ( Data2$SIC.Group[i] %in% metals ) {
Data2$SIC.Group[i] <- "Metal"
} else if ( Data2$SIC.Group[i] %in% stones ) {
Data2$SIC.Group[i] <- "Stone"
}
# ... и так далее для каждой группы
Вам все равно нужно было бы написать столько, если / иначе, сколько есть групп, что, мы надеемся, намного меньше, чем количество ваших кодов.
Чтобы еще больше сконденсировать, можно обойтись без петли:
metals <- c("10110","10410","10439")
stones <- c("14111","10421")
# ... and so on for each group
Data2$SIC.Group[ Data2$SIC.Group %in% metals ] <- "Metal"
Data2$SIC.Group[ Data2$SIC.Group %in% stones ] <- "Stone"
# ... and so on for each group
Чтобы еще больше сократить, вы можете определить свои группы в списке, как показано ниже, а затем просто иметь одну строку кода для всех групп на этапе назначения:
groupCodes <- list(
metals=c("10110","10410","10439"),
stones=c("14111","10421")
# ... and so on for each group
)
for (n in names(groupCodes)) {
# just once for all groups.
Data2$SIC.Group[ Data2$SIC.Group %in% groupCodes[[n]] ] <- n
}