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

R语言如何实现按Pred列C位置循环切换新列1/0填充值

问题原因

你的原有代码存在两个核心问题:

  1. ifelse(str_detect(Pred, "C"), 1, 0)已经给所有行都赋了确定的0/1值,没有NA值,fill()函数仅会填充缺失值,因此这行代码完全没有生效
  2. 逻辑不符合翻转需求:你需要的是每次遇到C后切换状态,而非仅C行取1
解决代码

我们可以通过累计截止到上一行的C的出现次数,判断次数的奇偶性来赋值:

library(dplyr)
miniDF1 <- miniDF1 %>%
  mutate(
    # 累计截止到当前行的上一行,C的出现次数,第一行默认上一行没有C
    lag_c_count = cumsum(lag(Pred == "C", default = FALSE)),
    # 累计次数为偶数时Outcome为1,奇数时为0,转整数类型
    Outcome = as.integer(lag_c_count %% 2 == 0)
  ) %>%
  # 移除辅助计算列
  select(-lag_c_count)
运行结果

执行后得到的miniDF1和你预期的miniDF2完全一致:

Pred Outcome
1     A       1
2     A       1
3     B       1
4     A       1
5     B       1
6     B       1
7     C       1
8     A       0
9     B       0
10    C       0
11    A       1
12    A       1
13    A       1
14    A       1
15    B       1
16    A       1
17    C       1
18    B       0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 20:27:00