2015-11-09 5 views
1

У меня есть этот data.frame с переменной V21, в которой записано много стран, я хочу уменьшить ее, просто указав континент, а не все эти страны. Например, «Куба», «Перу», «Аргентина», а не отдельные уровни V21, я хочу, чтобы они стали «Южной Америкой». Вот код, который я пытался использовать:Совокупные факторы в переменной в R

recode(WaveOne.test$V21, "levels("Cuba","Colombia","Costa Rica","Argentina","Chile","Ecuador","Peru","Venezuela")= 'South America'") 

levels(V21)

Можете ли вы предложить то, что случилось с моим кодом или, возможно, другой метод? Я полный новичок в R и его синтаксис. Спасибо!

======== ОБНОВЛЕНИЕ =========

SA_countries <- c("Cuba", "Mexico", "Argentina","Jamaica", "Haiti","West Indies", "Chile", "Ecuador", "Venezuela", "Other South America", "El Salvador", "Guatemala", "Nicaragua", "Dominican Republic", "Panama", "Costa Rica", "Peru") 

< Asia_countries - с ("Филиппины", "Вьетнам", "Лаос", "Камбоджа", «Хмонг», «Другая Азия», «Китай», «Гонконг», «Тайвань», «Япония», «Корея», «Индия», «Пакистан») Europe_Canada < - c («Европа/Канада») MiddleEast_Africa < - с ("Ближний Восток/Африка")

continents <- list(`South America`= SA_countries, `Asia` = Asia_countries, `Europe_Canada` = Europe_Canada, `Middle East & Africa` = MiddleEast_Africa) 
levels(WaveOne.test$V21) <- c(levels(WaveOne.test$V21), names(continents)) 
for(i in seq_along(continents)) WaveOne.test$V21[WaveOne.test$V21 %in%  continents[[i]]] <- names(continents)[i] 

levels(WaveOne.test$V21) 

Мой выход однако:

уровни (WaveOne.test $ V21)

1 "Куба" "Мексика" "Никарагуа" "Колумбия", "Доминиканская Республика", "Сальвадор", "Гватемала"
[8] " Гондурас "" Коста-Рика "" Панама "" Аргентина "" Чили "" Эквадор "" Перу "
[15]" Венесуэла "" Другая Южная Америка "" Гаити "" Ямайка "" Вест-Индия "" Филиппины "" Вьетнам "
[22] "Лаос" "Камбоджа" "Хмонг" "Другая Азия" "Китай" "Гонконг" "Тайвань"
[29] «Япония», «Корея», «Индия», «Пакистан», «Ближний Восток/Африка» «Европа/Канада», «Южная Америка»
[36] «Азия» «Europe_Canada» «Ближний Восток & Африка»

ответ

1

Вы можете создать список со всеми вашими странами и континентами затем переназначить значения соответственно:

continents <- list(`South America`=SA_countries, 
        `North America` = NA_countries, 
        Europe=Euro_countries) 
levels(df$V21) <- c(levels(df$V21), names(continents)) #necessary to add new levels 
for(i in seq_along(continents)) { 
df$V21[df$V21 %in% continents[[i]]] <- names(continents)[i]} 

Возпроизводимо Пример

set.seed(123) 
SA_countries <- c("Cuba","Colombia","Costa Rica","Argentina","Chile","Ecuador","Peru","Venezuela") 
NA_countries <- c("Mexico", "USA", "Canada") 
Euro_countries <- c("Germany", "France") 
df <- data.frame(V21=sample(c(NA_countries,SA_countries, Europe),20,T)) 
df 
#   V21 
# 1  Cuba 
# 2 Venezuela 
# 3 Costa Rica 
# 4  Germany 
# 5  France 
# 6  Mexico 
# 7 Argentina 
# 8  Germany 
# 9  Chile 
# 10 Costa Rica 
# 11  France 
# 12 Costa Rica 
# 13 Ecuador 
# 14  Chile 
# 15  USA 
# 16 Germany 
# 17  Cuba 
# 18  Mexico 
# 19 Colombia 
# 20  France 

continents <- list(`South America`=SA_countries, `North America` = NA_countries, Europe=Euro_countries) 
levels(df$V21) <- c(levels(df$V21), names(continents)) 
for(i in seq_along(continents)) df$V21[df$V21 %in% continents[[i]]] <- names(continents)[i] 
df 
#    V21 
# 1 South America 
# 2 South America 
# 3 South America 
# 4   Europe 
# 5   Europe 
# 6 North America 
# 7 South America 
# 8   Europe 
# 9 South America 
# 10 South America 
# 11  Europe 
# 12 South America 
# 13 South America 
# 14 South America 
# 15 North America 
# 16  Europe 
# 17 South America 
# 18 North America 
# 19 South America 
# 20  Europe 
Смежные вопросы