使用 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 中看到的那样,四个州的行未被正确识别,因此缺少该区域。这就是为什么你的表格不匹配。
我正在尝试将巴西各州包含的信息分组到区域中。
最初我通过函数 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 中看到的那样,四个州的行未被正确识别,因此缺少该区域。这就是为什么你的表格不匹配。