【问题标题】:Problems grouping information using the ifelse and case_when functions使用 ifelse 和 case_when 函数对信息进行分组时出现问题
【发布时间】:2021-08-12 03:17:11
【问题描述】:

我正在尝试将巴西每个州中包含的信息分组到区域中。 最初我通过函数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

【问题讨论】:

  • 您是否有可能使用geobr 获得您想要的东西?这是一个 R 包,可让您快速轻松地访问巴西的官方空间数据集。
  • 如果没有,如果您提供a complete minimal reproducible example,我们更有可能为您提供帮助,即简单的示例数据,以解决您的问题。我们可以从中工作并使用它来向您展示如何回答您的问题。我也会推荐看看这篇文章; how do I ask a good question.
  • 嗨,埃里克!感谢您的反馈。我想创建一个名为“Regions”的新变量,其中包含各州的分组信息。我从未与geobr 合作过,你呢?如果是这样,你能想出一个解决方案吗?
  • 我没有使用过geobr 包,我听说过。尽管您可能有兴趣探索它。证明你已经付出了一些努力通常是件好事。如果您想找到问题的直接解决方案,我建议您查看case_when 函数表单dplyr dplyr.tidyverse.org/reference/case_when.html(PS。我无法从这个工作站访问谷歌驱动器..)

标签: r database if-statement data-structures statistics


【解决方案1】:

您可以简化添加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

从表中可以看出,四个州的行没有被正确识别,因此该地区缺失。这就是为什么你的表格不匹配的原因。

【讨论】:

    猜你喜欢
    • 2021-01-14
    • 2021-12-17
    • 2015-06-23
    • 1970-01-01
    • 1970-01-01
    • 2014-06-13
    • 1970-01-01
    • 2023-01-30
    • 2021-12-10
    相关资源
    最近更新 更多