在R中使用case_when生成条件变量时遇逻辑向量错误求助
问题
在R中尝试基于条件生成新变量时触发错误:
Error: LHS of case 1 ("PA") must be a logical vector, not a character vector.
使用的代码如下:
sam_data_final %>% mutate(year = case_when(physicaladdress.stateorprovincecode = "PA" ~ '1997', physicaladdress.stateorprovincecode = "GA" ~ '1998', physicaladdress.stateorprovincecode = "UT" ~ '1999', physicaladdress.stateorprovincecode = "DE" ~ '2000', physicaladdress.stateorprovincecode = "HI" ~ '2000' , physicaladdress.stateorprovincecode = "MD" ~ '2000', physicaladdress.stateorprovincecode = "ID" ~ '2001', physicaladdress.stateorprovincecode = "SC" ~ '2001', physicaladdress.stateorprovincecode = "TX" ~ '2001', physicaladdress.stateorprovincecode = "LA" ~ '2003', physicaladdress.stateorprovincecode = "VT" ~ '2003', physicaladdress.stateorprovincecode = "AR" ~ '2003', physicaladdress.stateorprovincecode = "OH" ~ '2004', physicaladdress.stateorprovincecode = "NE" ~ '2006', physicaladdress.stateorprovincecode = "NH" ~ '2007', physicaladdress.stateorprovincecode = "MI" ~ '2008', physicaladdress.stateorprovincecode = "NY" ~ '2010', physicaladdress.stateorprovincecode = "FL" ~ '2012', physicaladdress.stateorprovincecode = "NM" ~ '2015', physicaladdress.stateorprovincecode = "CO" ~ '2016', physicaladdress.stateorprovincecode = "VA" ~ '2016'))
解决方法
错误根源
case_when()的每一个条件左侧(LHS)需要是逻辑向量,但代码里用了赋值符号=,导致左侧变成字符向量(比如"PA"),触发了错误。正确的相等比较应该用双等号==。
修正后的代码
sam_data_final %>% mutate(year = case_when(physicaladdress.stateorprovincecode == "PA" ~ '1997', physicaladdress.stateorprovincecode == "GA" ~ '1998', physicaladdress.stateorprovincecode == "UT" ~ '1999', physicaladdress.stateorprovincecode == "DE" ~ '2000', physicaladdress.stateorprovincecode == "HI" ~ '2000' , physicaladdress.stateorprovincecode == "MD" ~ '2000', physicaladdress.stateorprovincecode == "ID" ~ '2001', physicaladdress.stateorprovincecode == "SC" ~ '2001', physicaladdress.stateorprovincecode == "TX" ~ '2001', physicaladdress.stateorprovincecode == "LA" ~ '2003', physicaladdress.stateorprovincecode == "VT" ~ '2003', physicaladdress.stateorprovincecode == "AR" ~ '2003', physicaladdress.stateorprovincecode == "OH" ~ '2004', physicaladdress.stateorprovincecode == "NE" ~ '2006', physicaladdress.stateorprovincecode == "NH" ~ '2007', physicaladdress.stateorprovincecode == "MI" ~ '2008', physicaladdress.stateorprovincecode == "NY" ~ '2010', physicaladdress.stateorprovincecode == "FL" ~ '2012', physicaladdress.stateorprovincecode == "NM" ~ '2015', physicaladdress.stateorprovincecode == "CO" ~ '2016', physicaladdress.stateorprovincecode == "VA" ~ '2016'))
更简洁的写法
因为多个州对应同一年份,用dplyr::recode()可以避免重复写条件,代码更简洁:
sam_data_final %>% mutate(year = recode(physicaladdress.stateorprovincecode, "PA" = "1997", "GA" = "1998", "UT" = "1999", "DE" = "2000", "HI" = "2000", "MD" = "2000", "ID" = "2001", "SC" = "2001", "TX" = "2001", "LA" = "2003", "VT" = "2003", "AR" = "2003", "OH" = "2004", "NE" = "2006", "NH" = "2007", "MI" = "2008", "NY" = "2010", "FL" = "2012", "NM" = "2015", "CO" = "2016", "VA" = "2016"))
内容的提问来源于stack exchange,提问作者econ_grad12345
相关产品推荐
相关产品推荐

