【问题标题】:Mutate rows of dataframe based on previous rows根据先前的行改变数据帧的行
【发布时间】:2018-08-14 02:38:33
【问题描述】:

我有三个向量,coin.flipsalphabeta。在这里它们被初始化:

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 的值更新alpha/beta。如果coin.flips==1 则递增alpha,否则递增beta。以下是我在基础 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
  }
}

我怎样才能以整洁的方式做到这一点?假设coin.flips 是 tibble 或 data.frame 的列。有没有一种简单的方法来构造新列alpha/beta,该列的增量取决于coin.flips 的值和alpha/beta 的先前值?

【问题讨论】:

    标签: r dplyr tidyr


    【解决方案1】:

    这是我的看法。假设您在数据框 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
    

    【讨论】:

    • 壮观!谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-30
    • 1970-01-01
    • 1970-01-01
    • 2019-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多