我有以下数据

    hour   day month buy_call_cross_zero sell_call_position
   <dbl> <int> <dbl>               <dbl> <chr>             
 1     9     5     4                   0 NA                
 2    10     5     4                   0 NA                
 3    11     5     4                   0 NA                
 4    12     5     4                   0 NA                
 5    13     5     4                   0 NA                
 6    14     5     4                   0 NA                
 7    15     5     4                   0 NA                
 8    16     5     4                   0 NA                
 9     9     8     4                   2 sell              
10    10     8     4                   0 NA 

buy_call_cross_zero列中,我有一个数字,在sell_call_position列中,我有一些单词"sell"-在上面的例子中,它们对应于2sell.然而,在其他观察中,我有以下内容:

> so[113:120, 1:5]
# A tibble: 8 × 5
# Groups:   day, month [1]
   hour   day month buy_call_cross_zero sell_call_position
  <dbl> <int> <dbl>               <dbl> <chr>             
1     9    25     4                   3 sell              
2    10    25     4                   0 NA                
3    11    25     4                   0 NA                
4    12    25     4                   0 NA                
5    13    25     4                   0 NA                
6    14    25     4                   0 NA                
7    15    25     4                   0 NA                
8    16    25     4                   0 NA  

还有:

> so[153:160, 1:5]
# A tibble: 8 × 5
# Groups:   day, month [1]
   hour   day month buy_call_cross_zero sell_call_position
  <dbl> <int> <dbl>               <dbl> <chr>             
1     9     2     5                   5 sell              
2    10     2     5                   0 NA                
3    11     2     5                   0 NA                
4    12     2     5                   0 NA                
5    13     2     5                   0 NA                
6    14     2     5                   0 NA                
7    15     2     5                   0 NA                
8    16     2     5                   0 NA

我想做的是根据buy_call_cross_zero列中的数字向下移动sell_call_position观察sell.因此,在第一个例子中,预期输出是:

> so[113:120, 1:5]
# A tibble: 8 × 5
# Groups:   day, month [1]
   hour   day month buy_call_cross_zero sell_call_position
  <dbl> <int> <dbl>               <dbl> <chr>             
1     9    25     4                   3 REMOVED              
2    10    25     4                   0 NA                
3    11    25     4                   0 sell                
4    12    25     4                   0 NA                
5    13    25     4                   0 NA                
6    14    25     4                   0 NA                
7    15    25     4                   0 NA                
8    16    25     4                   0 NA  

在第二个例子中,它是:

> so[153:160, 1:5]
# A tibble: 8 × 5
# Groups:   day, month [1]
   hour   day month buy_call_cross_zero sell_call_position
  <dbl> <int> <dbl>               <dbl> <chr>             
1     9     2     5                   5 REMOVED              
2    10     2     5                   0 NA                
3    11     2     5                   0 NA                
4    12     2     5                   0 NA                
5    13     2     5                   0 sell                
6    14     2     5                   0 NA                
7    15     2     5                   0 NA                
8    16     2     5                   0 NA

生效日期:

df = structure(list(hour = c(9, 10, 11, 12, 13, 14, 15, 16, 9, 10, 
11, 12, 13, 14, 15, 16, 9, 10, 11, 12, 13, 14, 15, 16, 9, 10, 
11, 12, 13, 14, 15, 16, 9, 10, 11, 12, 13, 14, 15, 16, 9, 10, 
11, 12, 13, 14, 15, 16, 9, 10, 11, 12, 13, 14, 15, 16, 9, 10, 
11, 12, 13, 14, 15, 16, 9, 10, 11, 12, 13, 14, 15, 16, 9, 10, 
11, 12, 13, 14, 15, 16, 9, 10, 11, 12, 13, 14, 15, 16, 9, 10, 
11, 12, 13, 14, 15, 16, 9, 10, 11, 12, 13, 14, 15, 16, 9, 10, 
11, 12, 13, 14, 15, 16, 9, 10, 11, 12, 13, 14, 15, 16, 9, 10, 
11, 12, 13, 14, 15, 16, 9, 10, 11, 12, 13, 14, 15, 16, 9, 10, 
11, 12, 13, 14, 15, 16, 9, 10, 11, 12, 13, 14, 15, 16, 9, 10, 
11, 12, 13, 14, 15, 16, 9, 10, 11, 12, 13, 14, 15, 16), day = c(5L, 
5L, 5L, 5L, 5L, 5L, 5L, 5L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 9L, 
9L, 9L, 9L, 9L, 9L, 9L, 9L, 10L, 10L, 10L, 10L, 10L, 10L, 10L, 
10L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 12L, 12L, 12L, 12L, 
12L, 12L, 12L, 12L, 15L, 15L, 15L, 15L, 15L, 15L, 15L, 15L, 16L, 
16L, 16L, 16L, 16L, 16L, 16L, 16L, 17L, 17L, 17L, 17L, 17L, 17L, 
17L, 17L, 18L, 18L, 18L, 18L, 18L, 18L, 18L, 18L, 19L, 19L, 19L, 
19L, 19L, 19L, 19L, 19L, 22L, 22L, 22L, 22L, 22L, 22L, 22L, 22L, 
23L, 23L, 23L, 23L, 23L, 23L, 23L, 23L, 24L, 24L, 24L, 24L, 24L, 
24L, 24L, 24L, 25L, 25L, 25L, 25L, 25L, 25L, 25L, 25L, 26L, 26L, 
26L, 26L, 26L, 26L, 26L, 26L, 29L, 29L, 29L, 29L, 29L, 29L, 29L, 
29L, 30L, 30L, 30L, 30L, 30L, 30L, 30L, 30L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L), month = c(4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 
4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
5, 5, 5, 5, 5, 5, 5, 5, 5), buy_call_cross_zero = c(0, 0, 0, 
0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, NA, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), sell_call_position = c("NA", 
"NA", "NA", "NA", "NA", "NA", "NA", "NA", "sell", "NA", "NA", 
"NA", "NA", "NA", "NA", "NA", NA, "NA", "NA", "NA", "NA", "NA", 
"NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", 
"NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", 
"NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", 
"NA", "sell", "NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", 
"NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", 
"NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", 
"NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", 
"NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", 
"NA", "NA", "NA", "sell", "NA", "NA", "NA", "NA", "NA", "NA", 
"NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", 
"NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", 
"NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", 
"sell", "NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", 
"NA", "NA", "NA", "NA", "NA", "NA")), class = c("grouped_df", 
"tbl_df", "tbl", "data.frame"), row.names = c(NA, -168L), groups = structure(list(
    day = c(1L, 2L, 3L, 5L, 8L, 9L, 10L, 11L, 12L, 15L, 16L, 
    17L, 18L, 19L, 22L, 23L, 24L, 25L, 26L, 29L, 30L), month = c(5, 
    5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 
    4), .rows = structure(list(145:152, 153:160, 161:168, 1:8, 
        9:16, 17:24, 25:32, 33:40, 41:48, 49:56, 57:64, 65:72, 
        73:80, 81:88, 89:96, 97:104, 105:112, 113:120, 121:128, 
        129:136, 137:144), ptype = integer(0), class = c("vctrs_list_of", 
    "vctrs_vctr", "list"))), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -21L), .drop = TRUE))

推荐答案

这就是你想要的吗?

within(df, {
  idx = which(sell_call_position != "NA") 
  sell_call_position[idx + buy_call_cross_zero[idx]] = sell_call_position[idx]
  sell_call_position[idx] = "REPLACED"
  rm(idx)
})

    hour day month buy_call_cross_zero sell_call_position
1      9   5     4                   0                 NA
2     10   5     4                   0                 NA
3     11   5     4                   0                 NA
4     12   5     4                   0                 NA
5     13   5     4                   0                 NA
6     14   5     4                   0                 NA
7     15   5     4                   0                 NA
8     16   5     4                   0                 NA
9      9   8     4                   2           REPLACED
10    10   8     4                   0                 NA
11    11   8     4                   0               sell
12    12   8     4                   0                 NA
13    13   8     4                   0                 NA
14    14   8     4                   0                 NA
15    15   8     4                   0                 NA
16    16   8     4                   0                 NA
17     9   9     4                  NA               <NA>
...

我建议重新组织,即重新安排"NA"NA、.在前一步中.

R相关问答推荐

将第二个图放置在ggplot 2中另一个图的x轴上

使用map()内的公式()创建多个公式

如何在热图中绘制一个图形,但在每个单元格中通过饼形图显示?

跨列应用多个摘要函数:summerise_all:列表对象无法强制为double类型'

过滤矩阵以获得R中的唯一组合

从多个前置日期中获取最长日期

在边界外添加注释或标题

如何将在HW上运行的R中的消息(错误、警告等)作为批处理任务输出

R Markdown中的交叉引用表

大规模重新标记haven标签数据

pickerInput用于显示一条或多条geom_hline,这些线在图中具有不同 colored颜色

如何写一个R函数来旋转最后n分钟?

在df中保留原始变量和新变量

解析嵌套程度极高的地理数据

如果条件匹配,则使用Mariate粘贴列名

计算Mean by分组和绑定到R中的数据集

用满足特定列匹配的另一行替换NA行

随机将数据帧中特定列上的某些行设置为NA

如何在AER::ivreg中指定仪器?

在ggplot2图表中通过端点连接点