我有以下数据:
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
如果有人知道更快的方法......
谢谢!
答案 0 :(得分:1)
您可以使用data.table
和zoo
来完成此操作。这可以使用na.locf
中的zoo
来实现: -
library(data.table)
library(zoo)
setDT(data)
data[, dates := na.locf(dates)]
data[, USED := na.locf(USED)]
答案 1 :(得分:0)
dplyr::lag()
应该能够做你想做的事。