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

如何在R中创建DAC列:多条件判断及特殊列名处理

问题

需处理包含多种弱势社区(DAC)认定来源的公开数据集,创建名为DAC的新列:只要任意一个认定列符合条件,该列就显示"Yes",否则显示"No"。相关认定列及取值规则如下:

  • Disadvantaged_Community_OEHHA:值为全大写"YES"或"NO"
  • Disadvantaged_Community_SB535:值为首字母大写"Yes"或"No"
  • DAC(CARB)_LIC(CARB):值为"Low Income and Disadvantaged"或"NA"
  • Disadvantaged_Community_CE53:值为全大写"YES"或"NO"
  • Disadvantaged_Community_CE54:值为全大写"YES"或"NO"

同时疑问:带括号的列名DAC(CARB)_LIC(CARB)是否会有问题?已查到用反引号`可解决,但尝试的代码未成功,最后尝试的代码如下:

clean_transport_2022 <-transform(clean_transport_2022, DAC = ifelse(Disadvantaged_Community_OEHHA == "YES" | Disadvantaged_Community_SB535 == "Yes", `DAC(CARB)_LIC(CARB)` == "Low Income and Disadvantaged" | Disadvantaged_Community_CE53 = "YES" | Disadvantaged_Community_CE54 = "YES", "Yes", "No"))

数据集预览:

> head(clean_transport_2022)
# A tibble: 6 × 22
  Recipient_Contractor    Project_Title Project_Amount Project_Type
  <chr>                   <chr>                  <dbl> <chr>       
1 ABAG                    Bay Area EV …         14533. Electric Ve…
2 CA EV Alliance          Bay Area Cha…         12474. Electric Ve…
3 RTC Fuels, LLC dba Pea… Pearson Fuel…         71053  E85 Fueling…
4 Blink Acquisition       Nissan Elect…          6849. Electric Ve…
5 Redwood Coast Energy A… North Coast …         70000  Electric Ve…
6 ABAG                    Bay Area EV …          7266. Electric Ve…
# ℹ 18 more variables: Fuel_Type <chr>, Supply_Chain_Phase <chr>,
#   RDD_D_Phase <chr>, Status <chr>, Project_City <chr>,
#   Project_Zip <chr>, County <chr>, Air_District <chr>,
#   Electric_Service_Area <chr>,
#   Disadvantaged_Community_OEHHA <chr>,
#   Disadvantaged_Community_SB535 <chr>, Low_Income_SB535 <chr>,
#   Project_Location <chr>, LowIncome_SB1000 <chr>, …

解决方法

原代码错误点

  1. ifelse参数顺序错误:正确格式为ifelse(条件, 条件为真时的值, 条件为假时的值),你将多个OR条件拆分为参数,导致逻辑混乱。
  2. 条件判断误用赋值符号=,应使用等于符号==(如Disadvantaged_Community_CE53 = "YES"为错误写法)。
  3. 多OR条件未合理包裹,逻辑优先级不明确。

正确实现代码

方案1:Base R 写法

clean_transport_2022 <- transform(clean_transport_2022, 
                                  DAC = ifelse(
                                    Disadvantaged_Community_OEHHA == "YES" |
                                      Disadvantaged_Community_SB535 == "Yes" |
                                      `DAC(CARB)_LIC(CARB)` == "Low Income and Disadvantaged" |
                                      Disadvantaged_Community_CE53 == "YES" |
                                      Disadvantaged_Community_CE54 == "YES",
                                    "Yes", 
                                    "No"
                                  ))

方案2:dplyr 写法(逻辑更清晰)

若习惯使用tidyverse工具,推荐用mutate实现:

library(dplyr)

clean_transport_2022 <- clean_transport_2022 %>%
  mutate(DAC = case_when(
    Disadvantaged_Community_OEHHA == "YES" |
      Disadvantaged_Community_SB535 == "Yes" |
      `DAC(CARB)_LIC(CARB)` == "Low Income and Disadvantaged" |
      Disadvantaged_Community_CE53 == "YES" |
      Disadvantaged_Community_CE54 == "YES" ~ "Yes",
    TRUE ~ "No"
  ))

带括号列名的处理

你的判断正确:包含特殊字符(括号、空格等)的列名,在R中需用反引号`包裹才能正常调用,上述代码已正确处理DAC(CARB)_LIC(CARB)列。

另外,若DAC(CARB)_LIC(CARB)列的"NA"是缺失值(而非字符串"NA"),可将对应条件改为!is.na(DAC(CARB)_LIC(CARB)),需根据实际数据情况调整。


内容的提问来源于stack exchange,提问作者Julia Caron

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 05:44:58