r - 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]
提前非常感谢!
解决方案
您可以使用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))
推荐阅读
- python - 如何在 AWS 实例上设置警报以在我的数据分析完成时通知我?
- android - 如果数据存在,Android 更新记录
- python - 从列表中解析嵌套的 JSON
- reactjs - React 测试库:测试子项是否正确传递/呈现
- ios - 检测 iOS 设备进入睡眠模式
- javascript - Vue.js - 不能使用 Blazy
- javascript - Angular - Spring:如何将文件 + json 对象传递给 WS?
- postgresql - Postgresql函数忽略return语句并继续下一个return
- docker - Docker for windows sql express 卷数据不持久
- laravel-5 - 在 Laravel 中打印