我有一个伪变量,如下所示:

df <- data.frame(year = seq(1990, 1997, 1),
                 x = c(1, 0, 0, 0, 1, 1, 0, 0))

year  x
1990  1
1991  0
1992  0
1993  0
1994  1
1995  1
1996  0
1997  0

如果前三年中任一年的值为非零,我想创建一个等于1的伪y.预期结果:

year  x   y
1990  1  NA
1991  0  NA
1992  0   1
1993  0   0
1994  1   1
1995  1   1
1996  0   1
1997  0   1

我该怎么做呢?最好使用dplyr%的解决方案.

推荐答案

如果您确定需要3个值,则可以执行以下操作:

library(dplyr)

df %>% mutate(y = sign((x > 0) + (lag(x) > 0) + (lag(x, 2) > 0)))
#>   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

但如果您想 Select n,则更一般的解决方案是:

n <- 3

df %>% mutate(y = sign(purrr::reduce(seq(n) - 1, ~ .x + (lag(x, .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

R相关问答推荐

ggplot2中的X轴显示数值,单位为百,而不是十

R s iml包如何处理语法上无效的因子级别?'

在连续尺度上转置标签[瀑布图,R]

即使硬币没有被抛出,也要保持对其的跟踪

如何从像glm这样的模型中提取系数表的相关性?

如何对2个列表元素的所有组合进行操作?

plotly hover文本/工具提示在shiny 中不起作用

R如何计算现有行的总和以添加新的数据行

如果COLSUM为>;0,则COLNAME为向量

我是否可以使用多个变异项来构建顺序列(标记多个问题)

R中时间间隔的大向量与参考时间间隔的相交

如何筛选截止年份之前最后一个测量年度的所有观测值以及截止年份之后所有年份的所有观测值

使用geom_sf跨越日期线时的闭合边界

在使用SliderInput In Shiny(R)设置输入数据的子集时,保留一些情节痕迹

名字的模糊匹配

在不重复主题的情况下重新排列组

如何使用循环从R中的聚合函数创建列,而不会在名称中给出&q;$&q;?

根据排名的顶点属性调整曲线图布局(&Q)

将仪表板中的值框大小更改为Quarto

对数据帧中的列进行子集设置以通过迭代创建新的数据帧