如何解决使用 ifelse 和 case_when 函数分组信息的问题
我正在尝试将巴西每个州中包含的信息分组到区域中。
最初我通过函数 table
检查这些在每个州的分布。
数据:https://drive.google.com/file/d/1x7pD2yH-u3EZk5TB_bjKzkqyX3K1H-Tv/view?usp=sharing
table(Dados$Estado)
ACRE ALAGOAS
574 2184
AMAPÁ AMAZONAS
728 2624
BAHIA CEARÁ
9818 5694
disTRITO FEDERAL ESPÍRITO SANTO
17497 4289
GOIÁS MaraNHÃO
5896 2705
MATO GROSSO MATO GROSSO DO SUL
2984 2683
MINAS GERAIS PARÁ
20858 4714
ParaÍBA ParaNÁ
3428 10608
PERNAMBUCO PIAUÍ
6599 1908
RIO DE JANEIRO RIO GRANDE DO norTE
26787 2858
RIO GRANDE DO SUL RONDÔNIA
11739 1665
RORaimA SANTA CATARINA
514 7246
SÃO PAULO SERGIPE
51701 1693
TOCANTINS
1209
为了完成我想要的,我最初尝试使用 ifelse
字符串如下按地区分组的州,它没有正确显示值,也就是说,计数应该更高,因为我将每个州分组到各自的地区。我也试过使用table
包的case_when
函数,但是问题依旧。
dplyr
Dados$Regioes <- ifelse(Dados$Estado == c("SÃO PAULO","MINAS GERAIS","ESPÍRITO SANTO","RIO DE JANEIRO"),"Sudeste",ifelse(Dados$Estado == c("ParaNÁ","SANTA CATARINA","RIO GRANDE DO SUL"),"Sul",ifelse(Dados$Estado == c("MATO GROSSO DO SUL","MATO GROSSO","GOIÁS","disTRITO FEDERAL"),"Centro-Oeste",ifelse(Dados$Estado == c("AMAZONAS","ACRE","RONDÔNIA","RORaimA","PARÁ","TOCANTINS","AMAPÁ"),"norte",ifelse(Dados$Estado == c("BAHIA","SERGIPE","ALAGOAS","PERNAMBUCO","ParaÍBA","RIO GRANDE DO norTE","CEARÁ","PIAUÍ","MaraNHÃO"),"nordeste",NA)))))
table(Dados$Regioes)
Centro-Oeste nordeste norte
7338 4052 1707
Sudeste Sul
25786 9892
解决方法
您可以简化添加 Regioes
的过程,但您似乎也遇到了数据中字符集编码的问题。我使用以下代码读取了您的数据:
Dados <- read.csv(file.choose(),sep=";",encoding="latin1")
现在,创建一个包含状态和区域的数据框:
Regioes.df <- rbind(cbind(Estado= c("SÃO PAULO","MINAS GERAIS","ESPÍRITO SANTO","RIO DE JANEIRO"),Regioes=rep("Sudeste",4)),cbind(Estado=c("PARANÁ","SANTA CATARINA","RIO GRANDE DO SUL"),Regioes=rep("Sul",3)),cbind(Estado=c("MATO GROSSO DO SUL","MATO GROSSO","GOIÁS","DISTRITO FEDERAL"),Regioes=rep("Centro-Oeste",cbind(Estado=c("AMAZONAS","ACRE","RONDÔNIA","RORAIMA","PARÁ","TOCANTINS","AMAPÁ"),Regioes=rep("Norte",7)),cbind(Estado=c("BAHIA","SERGIPE","ALAGOAS","PERNAMBUCO","PARAÍBA","RIO GRANDE DO NORTE","CEARÁ","PIAUÍ","MARANHÃO"),Regioes=rep("Nordeste",9)))
现在与您的原始数据合并并制成表格:
Dados.Reg <- merge(Dados,Regioes.df,all=TRUE)
table(Dados.Reg$Estado,Dados.Reg$Regioes,useNA="ifany")
# Centro-Oeste Nordeste Norte Sudeste Sul <NA>
# ACRE 0 0 574 0 0 0
# ALAGOAS 0 2184 0 0 0 0
# AMAPÁ 0 0 728 0 0 0
# AMAZONAS 0 0 2624 0 0 0
# BAHIA 0 9818 0 0 0 0
# CEARÁ 0 5694 0 0 0 0
# DISTRITO FEDERAL 17497 0 0 0 0 0
# ESPÍRITO SANTO 0 0 0 1030 0 3259 <====
# GOIÁS 5896 0 0 0 0 0
# MARANHÃO 0 2705 0 0 0 0
# MATO GROSSO 2984 0 0 0 0 0
# MATO GROSSO DO SUL 2683 0 0 0 0 0
# MINAS GERAIS 0 0 0 5340 0 15518 <===
# PARÁ 0 0 4714 0 0 0
# PARAÍBA 0 3428 0 0 0 0
# PARANÁ 0 0 0 0 10608 0
# PERNAMBUCO 0 6599 0 0 0 0
# PIAUÍ 0 1908 0 0 0 0
# RIO DE JANEIRO 0 0 0 6666 0 20121 <===
# RIO GRANDE DO NORTE 0 2858 0 0 0 0
# RIO GRANDE DO SUL 0 0 0 0 11739 0
# RONDÔNIA 0 0 1665 0 0 0
# RORAIMA 0 0 514 0 0 0
# SANTA CATARINA 0 0 0 0 7246 0
# SÃO PAULO 0 0 0 12750 0 38951 <===
# SERGIPE 0 1693 0 0 0 0
# TOCANTINS 0 0 1209 0 0 0
正如您从表中看到的那样,四个州的行没有被正确识别,因此区域丢失。这就是您的表格不匹配的原因。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。