使用 ifelse 和 case_when 函数对信息进行分组时出现问题

Problems grouping information using the ifelse and case_when functions

我正在尝试将巴西各州包含的信息分组到区域中。 最初我通过函数 table.

检查了这些在每个州的分布
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 字符串,如下所示,但是,当再次执行创建的名为 regions 的变量的 table 函数时,看到它包含信息对于按地区分组的每个州,它没有正确显示值,也就是说,计数应该更高,因为我将每个州分组在各自的地区。我也尝试使用 dplyr 包的 case_when 功能,但是,问题仍然存在。

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
library(dplyr)
Dados$Regioes <- case_when(
Dados$Estado == c("SÃO PAULO","MINAS GERAIS", "ESPÍRITO SANTO", "RIO DE JANEIRO")~ "Sudeste",
Dados$Estado == c("PARANÁ","SANTA CATARINA", "RIO GRANDE DO SUL")~"Sul",
Dados$Estado == c("MATO GROSSO DO SUL", "MATO GROSSO", "GOIÁS","DISTRITO FEDERAL")~"Centro-Oeste",
Dados$Estado == c("AMAZONAS", "ACRE", "RONDÔNIA","RORAIMA","PARÁ","TOCANTINS","AMAPÁ")~ "Norte",
Dados$Estado == c("BAHIA", "SERGIPE", "ALAGOAS","PERNAMBUCO","PARAÍBA","RIO GRANDE DO NORTE","CEARÁ","PIAUÍ","MARANHÃO")~"Nordeste")
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", 4)),
                     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

正如您从 table 中看到的那样,四个州的行未被正确识别,因此缺少该区域。这就是为什么你的表格不匹配。