You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 18:49:12