gpt4 book ai didi

r - 如果满足条件,则用向量填充列

转载 作者:行者123 更新时间:2023-12-03 14:06:35 26 4
gpt4 key购买 nike

我正在尝试解决以下问题。
我有一个小贴士:

> tibble( signal = c(0,1,0,0,1,0,0,1,1,1,1,1,1,0), days =0)
# A tibble: 14 x 2
signal days
<dbl> <dbl>
1 0 0
2 1 0
3 0 0
4 0 0
5 1 0
6 0 0
7 0 0
8 1 0
9 1 0
10 1 0
11 1 0
12 1 0
13 1 0
14 0 0
我需要按以下方式填写天数列:
  • 找到 signal==1 并用向量 1,2,3,4 填充天数列一次
  • 在向量结束后找到下一个信号==1,并再次用向量 1,2,3,4 填充 days 列

  • 因此,结果将如下所示:
    signal  days
    <dbl> <dbl>
    1 0 0
    2 1 1
    3 0 2
    4 0 3
    5 1 4
    6 0 0
    7 0 0
    8 1 1
    9 1 2
    10 1 3
    11 1 4
    12 1 1
    13 1 2
    14 0 3
    我可以使用 for 循环来做到这一点,但很难做到最好使用 dplyr 进行矢量化。
    感谢任何帮助!

    最佳答案

    这是 data.table::set() 的基本内容

    library(data.table)
    i <- 1L
    n <- nrow(df)
    while (i < n) {
    if (df$signal[i] == 1) {
    k <- min(i+3L, n)
    set(df, i = (i:k), j = "days", 1L:(k-i+1L))
    i <- i+4L
    } else {
    i <- i+1L
    }
    }

    # signal days
    # 1 0 0
    # 2 1 1
    # 3 0 2
    # 4 0 3
    # 5 1 4
    # 6 0 0
    # 7 0 0
    # 8 1 1
    # 9 1 2
    # 10 1 3
    # 11 1 4
    # 12 1 1
    # 13 1 2
    # 14 0 3

    关于r - 如果满足条件,则用向量填充列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63939684/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com