R语言如何实现按Pred列C位置循环切换新列1/0填充值
问题原因
你的原有代码存在两个核心问题:
ifelse(str_detect(Pred, "C"), 1, 0)已经给所有行都赋了确定的0/1值,没有NA值,fill()函数仅会填充缺失值,因此这行代码完全没有生效- 逻辑不符合翻转需求:你需要的是每次遇到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
相关产品推荐
相关产品推荐

