假设我们有以下指标向量:

library(dplyr)
tibble(row = 1:20,
       indicator = rep(c(rep(0, 5), 1, rep(0, 4)), 2))

     row indicator
   <int>     <dbl>
 1     1         0
 2     2         0
 3     3         0
 4     4         0
 5     5         0
 6     6         1
 7     7         0
 8     8         0
 9     9         0
10    10         0
11    11         0
12    12         0
13    13         0
14    14         0
15    15         0
16    16         1
17    17         0
18    18         0
19    19         0
20    20         0


如何轻松创建指示符列周围区域的列.例如,如果我想创建三个大小为N=1、3和5的"区域",那么所需的输出应该如下所示:

     row indicator region_n1 region_n3 region_n5
   <int>     <dbl>     <dbl>     <dbl>     <dbl>
 1     1         0         0         0         0
 2     2         0         0         0         0
 3     3         0         0         0         0
 4     4         0         0         0         1
 5     5         0         0         1         1
 6     6         1         1         1         1
 7     7         0         0         1         1
 8     8         0         0         0         1
 9     9         0         0         0         0
10    10         0         0         0         0
11    11         0         0         0         0
12    12         0         0         0         0
13    13         0         0         0         0
14    14         0         0         0         1
15    15         0         0         1         1
16    16         1         1         1         1
17    17         0         0         1         1
18    18         0         0         0         1
19    19         0         0         0         0
20    20         0         0         0         0

当指示器变量中只有一个"1"时,我可以通过排序进行编码,但当有多个"1"时,我就很难做到这一点.任何帮助都非常感谢,谢谢.

推荐答案

laglead使用用户定义函数:

get_region_n <- function(x,n){
  if(n==1){
    return(x)
  }else{
    new_n <- (n-1)/2
    new_x <- x
    for(i in new_n:1){
      new_x <- new_x+lag(x,n=i,default=0)+lead(x,n=i,default=0)
    }
    return(new_x)
  }
}

df%>%mutate(region_n1=get_region_n(indicator,1),
            region_n3=get_region_n(indicator,3),
            region_n5=get_region_n(indicator,5))

     row indicator region_n1 region_n3 region_n5
   <int>     <dbl>     <dbl>     <dbl>     <dbl>
 1     1         0         0         0         0
 2     2         0         0         0         0
 3     3         0         0         0         0
 4     4         0         0         0         1
 5     5         0         0         1         1
 6     6         1         1         1         1
 7     7         0         0         1         1
 8     8         0         0         0         1
 9     9         0         0         0         0
10    10         0         0         0         0
11    11         0         0         0         0
12    12         0         0         0         0
13    13         0         0         0         0
14    14         0         0         0         1
15    15         0         0         1         1
16    16         1         1         1         1
17    17         0         0         1         1
18    18         0         0         0         1
19    19         0         0         0         0
20    20         0         0         0         0

R相关问答推荐

根据收件箱中的特定值提取列名

用derrr在R中查找组间的重复项

在另一个函数中调用ggplot2美学

如何调整曲线图中的y轴标签?

一小时满足条件的日期的 Select

在rpart. plot或fancyRpartPlot中使用带有下标的希腊字母作为标签?

SHINY:使用JS函数应用的CSS样式显示HTML表格

在列表中排列R数据框中的列顺序

汇总数据帧中的复制列,保持行的唯一性

正在导出默认的RStudio主题,还是设置括号 colored颜色 ?

随机森林的带Shap值的蜂群图

如何使这些react 表对象相互独立?

在点图上绘制置信度或预测区间ggplot2

如何在反曲线图中更改X标签

在不对R中的变量分组的情况下取两行的平均值

随机 Select 的非NA列的行均数

如何合并不同列表中的数据文件,包括基于名称的部分匹配,而不是一对一等价

在不带max()的data.table中按组查找最后一个元素

使用显式二元谓词子集化sfc对象时出错

Package emMeans:如果emmip模型中包含的变量较少,emMeans模型中的其他变量设置为什么?