R语言中按条件为数据框新增列(Stop前一行标记No)实现咨询
R语言实现方案
你已经完成了基础逻辑的赋值,只需额外定位所有Stop行的前一行,将对应值覆盖为No即可。
基础R实现(无需第三方包)
# 构造示例数据 stim <- c("a", "k", "y", "j", "t", "Stop", "f", "l", "b", "a", "c", "Stop") df <- data.frame(stim) # 基础逻辑赋值 df$YesorNo <- ifelse(df$stim == "Stop", "N/A", "yes") # 定位所有Stop的行索引 stop_pos <- which(df$stim == "Stop") # 过滤首行就是Stop的边界场景,避免索引为0报错 prev_pos <- stop_pos[stop_pos > 1] - 1 # 前一行赋值为No df$YesorNo[prev_pos] <- "No"
运行后输出结果和你的预期完全一致。
dplyr实现(适合管道流写法)
如果日常使用tidyverse生态,可以用lead()函数更直观实现逻辑:
library(dplyr) df <- df %>% mutate(YesorNo = case_when( stim == "Stop" ~ "N/A", lead(stim, default = "") == "Stop" ~ "No", TRUE ~ "yes" ))
lead(stim)会取当前行下一行的stim值,直接判断下一行是否为Stop即可给当前行打标,default参数处理最后一行不是Stop的场景,避免返回空值。
内容的提问来源于stack exchange,提问作者user15141497
相关产品推荐
相关产品推荐

