首页 > 解决方案 > R:如何填写 DF 中依赖于前一行的值

问题描述

我有一个数据框,我想根据前几行进行一些计算(比如在 excel 中向下拖动信息)。我的 DF 看起来像这样:

set.seed(1234)
df <- data.frame(DA = sample(1:3, 6, rep = TRUE) ,HB = sample(0:600, 6, rep = TRUE), D = sample(1:5, 6, rep = TRUE), AD = sample(1:14, 6, rep = TRUE), GM = sample(30:31, 6, rep = TRUE), GL = NA, R =NA, RM =0  )
df$GL[1] = 646
df$R[1] = 60
df$DA[5] = 2

df
#   DA  HB D AD GM  GL  R RM
# 1  2 399 4 13 30 646 60  0
# 2  2  97 4 10 31  NA NA  0
# 3  1 102 5  5 31  NA NA  0
# 4  3 325 4  2 31  NA NA  0
# 5  2  78 3 14 30  NA NA  0
# 6  1 269 4  8 30  NA NA  0

我想在我的 GL、R 和 RM 列中填写缺失值,这些值相互依赖。所以例如。

attach(df)

#calc GL and R for the 2nd row

df$GL[2] <- GL[1]+HB[2]+RM[1]

df$R[2] <- df$GL[2]*D[2]/GM[2]*AD[2]

#calc GL and R for the 3rd row

df$GL[3] <- df$GL[2]+HB[3]+df$RM[2]
df$R[3] <-df$GL[3]*D[3]/GM[3]*AD[3]

#and so on..

有没有办法一次完成所有计算,而不是逐行?

此外,每次列 'DA' = 1 时,'R' 的先前值应为 'RM' 的同一行求和,但仅从最后一次出现。以便

attach(df)

df$RM[3] <-R[1]+R[2]+R[3]

#and RM for the 6th row is calculated by

#df$RM[6] <-R[4]+R[5]+R[6]

提前非常感谢!

标签: rdataframeif-statementrowscalculation

解决方案


您可以使用for循环来计算GL值,一旦有了它们,您就可以R直接对列进行计算。

for(i in 2:nrow(df)) {
  df$GL[i] <- with(df, GL[i-1]+HB[i]+RM[i-1])
}
df$R <- with(df, (GL* D)/(GM *AD))

推荐阅读