如何在R语言数据框中遍历F2.trigger列并生成标记新列
解决方案
你可以用两种方式实现需求,分别基于dplyr(tidyverse风格)和Base R:
方法一:使用dplyr(推荐,代码更直观)
先确保安装并加载dplyr包,然后通过mutate结合lead函数实现逻辑:
# 安装dplyr(首次使用时执行) install.packages("dplyr") library(dplyr) # 生成新列 df1 <- df1 %>% mutate(next_is_M = case_when( # 仅当当前行是"F2"时,检查下一行是否为"M" F2.trigger == "F2" ~ lead(F2.trigger, default = "F2") == "M", # 非"F2"行直接标记为FALSE TRUE ~ FALSE ))
代码说明:
lead(F2.trigger, default = "F2"):获取当前行的下一行F2.trigger值,最后一行无后续行,用"F2"填充(确保最后一行的"F2"会被标记为FALSE)case_when:按条件赋值,精准匹配你的需求逻辑
方法二:使用Base R(无需额外包)
如果不想加载第三方包,可通过行索引操作实现:
# 初始化新列为FALSE df1$next_is_M <- FALSE # 找到所有"F2"所在的行号 f2_rows <- which(df1$F2.trigger == "F2") # 过滤掉最后一行的"F2"(无后续行可判断) valid_f2_rows <- f2_rows[f2_rows < nrow(df1)] # 对有效"F2"行,检查下一行是否为"M"并赋值 df1$next_is_M[valid_f2_rows] <- df1$F2.trigger[valid_f2_rows + 1] == "M"
示例结果
运行上述任意代码后,你的示例数据框会新增next_is_M列,结果如下:
| date | line | machine | sample_loc | F2.trigger | next_is_M |
|---|---|---|---|---|---|
| 2023-04-01 | G1 | M1 | L1 | N | FALSE |
| 2023-04-02 | G1 | M1 | L1 | F2 | TRUE |
| 2023-04-03 | G1 | M1 | L1 | M | FALSE |
| 2023-04-04 | G1 | M1 | L1 | N | FALSE |
| 2023-04-05 | G1 | M1 | L1 | F2 | FALSE |
| 2023-04-06 | G1 | M1 | L1 | N | FALSE |
| 2023-04-07 | G1 | M1 | L1 | F2 | FALSE |
| 2023-04-08 | G1 | M1 | L1 | F2 | FALSE |
内容的提问来源于stack exchange,提问作者aig0216
相关产品推荐
相关产品推荐

