微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 ifelse 和 case_when 函数分组信息的问题

如何解决使用 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 举报,一经查实,本站将立刻删除。