如何在R中的数据帧中循环一列?

如何在R中的数据帧中循环一列?,r,dataframe,R,Dataframe,我对R很陌生。我有一个df和一个V1列。我想创建一个循环来计算比率(cuf off值) 我想取第一个数字1除以301,然后将值放入adf$V2。然后我想把前两个数相加,然后除以301等等 For example: V2 1/301 (first value of df) 0.0033 2/301 (sum of the first two values of d

我对R很陌生。我有一个
df
和一个
V1
列。我想创建一个循环来计算比率(cuf off值)

我想取第一个数字1除以301,然后将值放入a
df$V2
。然后我想把前两个数相加,然后除以301等等

For example:
                                                V2
1/301 (first value of df)                     0.0033
2/301 (sum of the first two values of df)     0.0066
2/301 (sum of the first three values of df)   0.0066  


df

V1

1
1
0
0
1
0
1
1
1
0

您可以将
V1
值的累积和除以301

df$V2 <- cumsum(df$V1)/301
df

#   V1      V2
#1   1 0.00332
#2   1 0.00664
#3   0 0.00664
#4   0 0.00664
#5   1 0.00997
#6   0 0.00997
#7   1 0.01329
#8   1 0.01661
#9   1 0.01993
#10  0 0.01993

df$V2我们可以
transform
通过将“V1”的累积和除以301来创建“V2”

df <- transform(df, V2 = cumsum(V1)/301)

或者另一个选项是
Reduce
with
accumulate=TRUE

transform(df, V2 = Reduce(`+`, V1, accumulate = TRUE)/301)

或者,如果我们需要循环,在行序列上循环,然后通过元素序列的
sum
分配'V2'的每个值,从1到'V1'的行除以301

df$V2 <- 0
for(i in seq_len(nrow(df))) {
       df$V2[i] <- sum(df$V1[1:i])/301
 }

或使用
累计

library(purrr)
df %>%
   mutate(V2 = accumulate(V1, `+`)/301)
数据
df您能否显示完整的预期输出
library(dplyr)
df %>%
   mutate(V2 = cumsum(V1)/301)
library(purrr)
df %>%
   mutate(V2 = accumulate(V1, `+`)/301)
df <- structure(list(V1 = c(1, 1, 0, 0, 1, 0, 1, 1, 1, 0)), class = "data.frame",
     row.names = c(NA, 
-10L))