如何在R中选取指定行的前n行?求dplyr实现方案(含场景)
在R中用dplyr创建基于过去三年x值的虚拟变量y
原始数据
首先定义你的数据框:
df <- data.frame(year = seq(1990, 1997, 1), x = c(1, 0, 0, 0, 1, 1, 0, 0))
方法一:仅用dplyr(无需额外包)
利用lag()函数获取前1、前2行的x值,结合case_when()判断条件:
library(dplyr) df <- df %>% mutate(y = case_when( # 前两行数据不足三年,设为NA row_number() < 3 ~ NA_real_, # 当前行及过去两年中任意x为1时,y=1 x == 1 | lag(x, 1) == 1 | lag(x, 2) == 1 ~ 1, # 其余情况y=0 TRUE ~ 0 ))
方法二:结合slider包(适合灵活调整窗口大小)
如果后续需要调整窗口范围,用slider包的滚动窗口函数更方便:
library(dplyr) library(slider) df <- df %>% # 滑动窗口包含当前行及前2行,共3行;仅窗口完整时计算 mutate(y = slide_dbl(x, ~any(.x == 1), .before = 2, .complete = TRUE)) %>% # 将逻辑值转为1/0 mutate(y = ifelse(y, 1, 0))
最终结果
运行上述代码后,数据框会生成符合要求的y变量:
year x y 1 1990 1 NA 2 1991 0 NA 3 1992 0 1 4 1993 0 0 5 1994 1 1 6 1995 1 1 7 1996 0 1 8 1997 0 1
内容的提问来源于stack exchange,提问作者aerw4
相关产品推荐
相关产品推荐

