循环遍历R

时间:2018-09-26 15:09:31

标签: r loops

我想用上一个乘以标量(例如3)替换数据框第一列中的每个缺失值

nRowsDf <- nrow(df)
for(i in 1:nRowsDf){
  df[i,1] =ifelse(is.na(df[i,1]), lag(df[i,1])+3*lag(df[i,1]),   df[i,1])
  }

上面的代码没有给我一个错误,但也没有执行任何操作。

此外,有没有比编写循环更好的方法了?

更新和数据:

这里是数据示例。我想用上一个乘以标量(例如3)替换数据框第一列中的每个缺失值。 NA值在随后的行中。

df <- mtcars
df[c(2,3,4,5),1] <-NA

IND <- is.na(df[,1])
df[IND,1] <- df[dplyr::lead(IND,1L, F),1] * 3

以上代码的最后一行逐行完成作业(我应该运行它4次以填充缺少的4行)。如何为所有行一次?

1 个答案:

答案 0 :(得分:1)

您应提供的可复制的数据:

df <- mtcars
df[c(1,5,8),1] <-NA

代码:

IND <- is.na(df[,1])
df[IND,1] <- df[dplyr::lag(IND,1L, F),1] * 3

  • 因为您使用了滞后,所以我使用了滞后。您说的是“上一个”。因此,也许您想使用lead
  • 如果缺少前导情况下的第一个值或滞后情况下的最后一个值,会发生什么情况。 (这仍然是个谜)