如何提取分组变量Sequ每个新实例的紧邻前一行数据?
提取每个Sequ新实例的紧邻前一行数据
原始数据
df <- data.frame( IPU_id = 1:9, Sequ = c(NA,NA,1,1,2,2,NA,3,3), Q = c(NA,NA,"q_wh","q_wh","q_wh","q_wh",NA,"q_pol","q_pol"), N_extension = c(NA,NA,0,NA,1,NA,NA,0,NA) )
需求说明
针对每个非NA的Sequ值,提取其首次出现行的紧邻前一行数据,无论该行的Sequ是否为NA。
解决方案
方法1:使用base R
# 定位每个非NA Sequ的首次出现位置 first_occur <- which(!duplicated(df$Sequ, incomparables = NA) & !is.na(df$Sequ)) # 提取这些位置的前一行 result <- df[first_occur - 1, ] # 查看结果 result
方法2:使用dplyr包
library(dplyr) result <- df %>% # 标记每个非NA Sequ的首次出现行 mutate(is_first = !duplicated(Sequ, incomparables = NA)) %>% # 筛选出首次出现的行并提取其行号 filter(is_first & !is.na(Sequ)) %>% pull(row_number()) %>% # 取对应行号的前一行 {df[.-1, ]} # 查看结果 result
运行结果
IPU_id Sequ Q N_extension 2 2 NA <NA> NA 4 4 1 q_wh NA 7 7 NA <NA> NA
内容的提问来源于stack exchange,提问作者Chris Ruehlemann
相关产品推荐
相关产品推荐

