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

如何基于三个变量创建二元变量并程序化计算desired_output?

计算desired_output的实现方案

先帮你拆解需求和示例数据的对应关系:从你给出的示例来看,desired_output的生成规则可以总结为:

  • 当airline == 1(航司运营当前city1-city2航线),直接标记为1;
  • 当airline == 0(航司不运营当前航线),标记为1的条件是该航司同时运营了city1的其他航线和city2的其他航线(这点和你描述的“或”略有差异,我会同时给出两种逻辑的代码)。

方案1:完全匹配示例数据的逻辑(同时运营city1和city2的其他航线)

我们可以先统计每个城市被该航司运营的航线数量,再基于统计结果计算目标变量:

# 先安装并加载dplyr(如果没装过的话)
# install.packages("dplyr")
library(dplyr)

# 你的原始数据
airline<-c(0,0,1,0,0,1)
city1<-c('a','a','a','b','b','c')
city2<-c('b','c','d','c','d','d')
mktdf<-data.frame(airline, city1, city2)

# 步骤1:统计每个城市的运营航线数(仅统计airline=1的航线)
city_operation_counts <- mktdf %>%
  filter(airline == 1) %>%
  pivot_longer(cols = c(city1, city2), names_to = "type", values_to = "city") %>%
  count(city, name = "operation_count")

# 步骤2:合并统计结果到原数据,计算desired_output
mktdf <- mktdf %>%
  left_join(city_operation_counts, by = c("city1" = "city")) %>%
  rename(city1_ops = operation_count) %>%
  left_join(city_operation_counts, by = c("city2" = "city")) %>%
  rename(city2_ops = operation_count) %>%
  # 把NA替换为0(表示该城市没有被运营的航线)
  mutate(across(c(city1_ops, city2_ops), ~replace_na(., 0))) %>%
  # 按规则生成目标变量
  mutate(desired_output = case_when(
    airline == 1 ~ 1,
    airline == 0 & city1_ops > 0 & city2_ops > 0 ~ 1,
    TRUE ~ 0
  )) %>%
  # 移除中间变量(可选操作)
  select(-city1_ops, -city2_ops)

# 查看最终结果
mktdf

运行这段代码后,你会得到和示例完全一致的desired_output。

方案2:符合你文字描述的逻辑(运营city1或city2的其他航线)

如果你确实需要“或”的逻辑(只要city1或city2有其他运营航线就标记为1),只需要修改case_when里的判断条件:

mktdf <- mktdf %>%
  # 前面的步骤和方案1完全一致
  mutate(desired_output = case_when(
    airline == 1 ~ 1,
    airline == 0 & (city1_ops > 0 | city2_ops > 0) ~ 1,
    TRUE ~ 0
  ))

修改后,第一行的desired_output会变成1(因为city1=a有运营航线),这完全匹配你文字描述的逻辑。

不用dplyr的基础R实现

如果你不想依赖dplyr,也可以用基础R代码完成:

# 原始数据
airline<-c(0,0,1,0,0,1)
city1<-c('a','a','a','b','b','c')
city2<-c('b','c','d','c','d','d')
mktdf<-data.frame(airline, city1, city2)

# 先找出所有被航司运营的城市
operated_cities <- unique(c(mktdf$city1[mktdf$airline == 1], mktdf$city2[mktdf$airline == 1]))

# 计算desired_output(示例逻辑:同时运营)
mktdf$desired_output <- ifelse(mktdf$airline == 1, 1,
                               ifelse((mktdf$city1 %in% operated_cities) & (mktdf$city2 %in% operated_cities), 1, 0))

# 如果要切换为描述逻辑(或),替换为下面的代码:
# mktdf$desired_output <- ifelse(mktdf$airline == 1, 1,
#                                ifelse((mktdf$city1 %in% operated_cities) | (mktdf$city2 %in% operated_cities), 1, 0))

内容的提问来源于stack exchange,提问作者SeánMcK

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:14:47