我有三个向量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
我想根据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>
答案 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