根据前一行对数据框的行进行突变

时间:2018-08-14 02:38:33

标签: r dplyr tidyr

我有三个向量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

我想根据alpha的值更新beta / coin.flips。如果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是小标题或data.frame的列。是否有一种简单的方法来构造新列alpha / beta,这些列根据coin.flips的值和alpha / beta的先前值而增加?< / p>

1 个答案:

答案 0 :(得分: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