代码之家  ›  专栏  ›  技术社区  ›  Demetri Pananos

基于前几行改变数据帧的行

  •  0
  • Demetri Pananos  · 技术社区  · 6 年前

    我有三个向量, coin.flips , alpha beta . 它们在这里被初始化:

    coin.flips <- c(NA,rbinom(n = 5, size = 1, prob = 0.5))
    
    N <- length(coin.flips)
    
    alpha <- rep(0,length(coin.flips))
    alpha[1]<-1
    
    beta <- rep(0,length(coin.flips))
    beta[1]<-1
    

    我想更新 / 贝塔 取决于 掷硬币 coin.flips==1 然后递增 阿尔法 ,否则递增 贝塔 . 这是我在R基地做的。

    for(i in 2:N){
      if(coin.flips[i]>0){
        alpha[i] = alpha[i-1]+1
        beta[i] = beta[i-1]
      }
      else{
        alpha[i] = alpha[i-1]
        beta[i] = beta[i-1]+1
      }
    }
    

    掷硬币 是tibble或data.frame的列。有没有一种简单的方法来构造新的列 阿尔法 贝塔 增量取决于 掷硬币 以前的价值观 / ?

    1 回复  |  直到 6 年前
        1
  •  1
  •   davsjob    6 年前

    这是我要的。假设在数据框df中有一个名为coin.flips的列:

    library(dplyr)
    df <- data.frame(coin.flips = c(rbinom(n = N, size = 1, prob = 0.5)))
    
    df <- df %>% 
      mutate(alpha = 1 + cumsum(coin.flips),
             beta  = 1 + cumsum(if_else(coin.flips == 0, 1, 0))) %>% 
      print