r - 嵌套 if else; 堆栈溢出?
问题描述
我正在尝试向 tibble 添加一个新变量,该变量是我正在使用 mutate 函数研究的每个区域的人口。为此,我认为我需要使用 ifelse 函数(我尝试过 case_when 函数),因为这些区域是由它们的首字母缩写词标识的;我正在尝试为他们的每一个首字母缩写词分配人口。
所以这就是我一直在做的:
hosp%>% mutate(poblacion =ifelse(hosp$provincia_iso=="A", 1879888, ifelse(hosp$provincia_iso=="VI", 333940,
ifelse(hosp$provincia_iso=="AB", 388270, ifelse(hosp$provincia_iso=="AL", 727945, ifelse(hosp$provincia_iso=="O", 1018784,
ifelse(hosp$provincia_iso=="AV", 157664, ifelse((hosp$provincia_iso=="BA"), 672137, ifelse((hosp$provincia_iso=="PM"), 672137,
ifelse((hosp$provincia_iso=="B"), 5743402, ifelse((hosp$provincia_iso=="BU"), 357650,
ifelse((hosp$provincia_iso=="CC"), 391850,ifelse((hosp$provincia_iso=="CA"), 1244049,
ifelse((hosp$provincia_iso=="S"), 582905,ifelse((hosp$provincia_iso=="CS"), 585590,
ifelse((hosp$provincia_iso=="CR"), 495045,ifelse((hosp$provincia_iso=="CO"), 781451,
ifelse((hosp$provincia_iso=="CU"), 196139, ifelse((hosp$provincia_iso=="GI"), 781788,
ifelse((hosp$provincia_iso=="GR"), 919168, ifelse((hosp$provincia_iso=="GU"), 261995,
ifelse((hosp$provincia_iso=="SS"), 727121, ifelse((hosp$provincia_iso=="H"), 524278,
ifelse((hosp$provincia_iso=="HU"), 222687, ifelse((hosp$provincia_iso=="J"), 631381,
ifelse((hosp$provincia_iso=="C"), 1121815, ifelse((hosp$provincia_iso=="LO"), 319914,
ifelse((hosp$provincia_iso=="GC"), 131065, ifelse((hosp$provincia_iso=="LE"), 456439,
ifelse((hosp$provincia_iso=="L"), 438517, ifelse((hosp$provincia_iso=="LU"), 327946,
ifelse((hosp$provincia_iso=="M"), 6779888, ifelse((hosp$provincia_iso=="MA"), 1685920,
ifelse((hosp$provincia_iso=="MU"), 1511251, ifelse((hosp$provincia_iso=="NA"), 661197,
ifelse((hosp$provincia_iso=="OR"), 306650, ifelse((hosp$provincia_iso=="P"), 160321,
ifelse((hosp$provincia_iso=="PO"), 945408, ifelse((hosp$provincia_iso=="SA"), 329245,
ifelse((hosp$provincia_iso=="TF"), 1044887, ifelse((hosp$provincia_iso=="SG"), 153478,
ifelse((hosp$provincia_iso=="SE"), 1950219, ifelse((hosp$provincia_iso=="SO"), 88894,
ifelse((hosp$provincia_iso=="T"), 816772, ifelse((hosp$provincia_iso=="TE"), 134176,
ifelse((hosp$provincia_iso=="TO"), 703772, ifelse((hosp$provincia_iso=="V"), 2591875,
ifelse((hosp$provincia_iso=="VA"), 520649, ifelse((hosp$provincia_iso=="BI"), 1159443,
ifelse((hosp$provincia_iso=="ZA"), 170588, ifelse((hosp$provincia_iso=="Z"), 972528,
ifelse((hosp$provincia_iso=="CE"), 84202, ifelse((hosp$provincia_iso=="ML"), 87076, NA)))))))))))))
但也许你用一个更简单的例子来帮助我会更容易:
province <- c("A", "B", "C", "D")
cases<-c(135,120,160, 100)
df <- data.frame(province, cases)
df%>% mutate(poblacion =ifelse(df$ province=="A", 1879888, ifelse( df$ province=="C", 333940,
ifelse( df$ province=="B", 388270, ifelse(df$ province=="D", 727945, NA))))))))))))))))))))))
问题是,虽然这有效,但当我运行问题脚本的上部时,我在第 24 行得到一些“stackoverflow 错误”,并且我只得到脚本最后 2 个省份的值。
另外我想问一下是否有更简单的方法来做到这一点。
解决方案
这就是你可以这样做的方式case_when
:
province <- c("A", "B", "C", "D")
cases<-c(135,120,160, 100)
df <- data.frame(province, cases)
df%>%
mutate(poblacion =case_when(
province=="A" ~ 1879888,
province=="C" ~ 333940,
province=="B" ~ 388270,
province=="D" ~ 727945,
TRUE ~ NA_real_))
# province cases poblacion
# 1 A 135 1879888
# 2 B 120 388270
# 3 C 160 333940
# 4 D 100 727945
我认为如果您使用这种方法,它将解决问题,例如:
hosp%>%
mutate(poblacion =
cae_when(
hosp$provincia_iso=="A" ~ 1879888,
hosp$provincia_iso=="VI" ~ 333940,
hosp$provincia_iso=="AB" ~ 388270,
hosp$provincia_iso=="AL" ~ 727945,
hosp$provincia_iso=="O" ~ 1018784,
hosp$provincia_iso=="AV" ~ 157664,
hosp$provincia_iso=="BA" ~ 672137,
hosp$provincia_iso=="PM" ~ 672137,
hosp$provincia_iso=="B" ~ 5743402,
hosp$provincia_iso=="BU" ~ 357650,
hosp$provincia_iso=="CC" ~ 391850,
hosp$provincia_iso=="CA" ~ 1244049,
hosp$provincia_iso=="S" ~ 582905,
hosp$provincia_iso=="CS" ~ 585590,
hosp$provincia_iso=="CR" ~ 495045,
hosp$provincia_iso=="CO" ~ 781451,
hosp$provincia_iso=="CU" ~ 196139,
hosp$provincia_iso=="GI" ~ 781788,
hosp$provincia_iso=="GR" ~ 919168,
hosp$provincia_iso=="GU" ~ 261995,
hosp$provincia_iso=="SS" ~ 727121,
hosp$provincia_iso=="H" ~ 524278,
hosp$provincia_iso=="HU" ~ 222687,
hosp$provincia_iso=="J" ~ 631381,
hosp$provincia_iso=="C" ~ 1121815,
hosp$provincia_iso=="LO" ~ 319914,
hosp$provincia_iso=="GC" ~ 131065,
hosp$provincia_iso=="LE" ~ 456439,
hosp$provincia_iso=="L" ~ 438517,
hosp$provincia_iso=="LU" ~ 327946,
hosp$provincia_iso=="M" ~ 6779888,
hosp$provincia_iso=="MA" ~ 1685920,
hosp$provincia_iso=="MU" ~ 1511251,
hosp$provincia_iso=="NA" ~ 661197,
hosp$provincia_iso=="OR" ~ 306650,
hosp$provincia_iso=="P" ~ 160321,
hosp$provincia_iso=="PO" ~ 945408,
hosp$provincia_iso=="SA" ~ 329245,
hosp$provincia_iso=="TF" ~ 1044887,
hosp$provincia_iso=="SG" ~ 153478,
hosp$provincia_iso=="SE" ~ 1950219,
hosp$provincia_iso=="SO" ~ 88894,
hosp$provincia_iso=="T" ~ 816772,
hosp$provincia_iso=="TE" ~ 134176,
hosp$provincia_iso=="TO" ~ 703772,
hosp$provincia_iso=="V" ~ 2591875,
hosp$provincia_iso=="VA" ~ 520649,
hosp$provincia_iso=="BI" ~ 1159443,
hosp$provincia_iso=="ZA" ~ 170588,
hosp$provincia_iso=="Z" ~ 972528,
hosp$provincia_iso=="CE" ~ 84202,
hosp$provincia_iso=="ML" ~ 87076,
TRUE ~ NA_real_))
推荐阅读
- c# - 大摇大摆地为通用控制器添加文档和操作
- php - 如何从数据库中获取某个部分?
- c# - Image.RotateFlip 似乎没有旋转位图
- wordpress - 如何在 Wordpress 中使用自定义随机头像?
- django - 如何在 django-rest-framework-social-oauth2 中使用 csrf (csrftoken) cookie 会话
- php - str_split() 有几个长度
- java - Spring Boot中同一实体的多种表示形式
- bash - 谷歌大查询命令行执行复杂查询给出错误意外'('
- spring - 制作与 Jboss Wildfly 兼容的 Spring 5 瘦身战
- ios - Xcode 中如何有两种类型的环境