如何在R中根据数据框指定列的指定字符提取对应下一行数据
需求说明
我们需要提取数据框中Procedure列取值为p2的每一行对应的下一行数据,所用示例数据框构造代码如下:
df <- data.frame( Sub = c(1:15), var = c(400,300,346,432,203,480,760,274,284,592,248,714,384,394,528), Procedure = c("p1","p2","p1","p1","p2","p1","p1","p1","p2","p1","p1","p2","p1","p1","p1") )
实现方法
方法1:基础R实现
思路是先定位所有Procedure等于p2的行索引,将索引+1后提取对应行即可,逻辑直观无需额外依赖:
# 定位p2所在的行索引 p2_index <- which(df$Procedure == "p2") # 提取对应下一行数据,自动过滤超出数据框行数的无效索引 result <- df[p2_index + 1, ]
方法2:dplyr包实现
借助dplyr的lag函数(取当前行的上一列值)直接筛选,代码更简洁易读:
library(dplyr) result <- df %>% filter(lag(Procedure) == "p2")
两种方法运行后得到的结果一致:
| Sub | var | Procedure |
|---|---|---|
| 3 | 346 | p1 |
| 6 | 480 | p1 |
| 10 | 592 | p1 |
| 13 | 384 | p1 |
内容的提问来源于stack exchange,提问作者Rosie
相关产品推荐
相关产品推荐

