在列R中复制值

时间:2018-01-04 14:56:09

标签: r

我有以下数据:

dates       CLOSE    USED
20110309    58,1483 Historico
NA          58,1483 
NA          57,0001 
20110310    34,999  Historico
NA          57,1272 
NA          55,9756 
20110311    59,898  Historico
NA          56,3055 
NA          55,1518 

我想复制日期的值以及以下行中使用的值,如果它们为空或NA,如下表所示:

dates       CLOSE      USED
20110309    58,1483 Historico
20110309    57,0001 Historico
20110310    57,1272 Historico
20110310    55,9756 Historico
20110311    56,3055 Historico
20110311    55,1518 Historico

我使用for循环来执行此操作:

  for (j in 1:dim(data)[1]){

    if(is.na(data$dates[j]) || (data$USED=="")){
      data$dates[j]=data$dates[j-1]
      data$USED[j]=data$USED[j-1]
    }

因为循环而有点慢,因为我的文件很大,所以我想知道它是否是一种更快的部署方式。

我也尝试使用which函数,但它无法正常工作:

data$dates[which(is.na(data$dates))]=data$dates[which(is.na(data$dates))-1]

它仅适用于一个空行,如下所示:

dates       CLOSE    USED
20110309    58,1483 Historico
20110309    58,1483 Historico
NA          57,0001 
20110310    34,999  Historico
20110310    57,1272 Historico
NA          55,9756 
20110311    59,898  Historico
20110311    56,3055 Historico
NA          55,1518 

如果有人知道更快的方法......

谢谢!

2 个答案:

答案 0 :(得分:1)

您可以使用data.tablezoo来完成此操作。这可以使用na.locf中的zoo来实现: -

library(data.table)
library(zoo)
setDT(data)
data[, dates := na.locf(dates)]
data[, USED := na.locf(USED)]

答案 1 :(得分:0)

dplyr::lag()应该能够做你想做的事。