对于给定的不完整数据框df
和完整索引t
:
t = seq(as.POSIXct("2016-01-01 00:05:00"), as.POSIXct("2016-01-01 01:00:00"), by = '5 min')
index<-t[c(1,2,4:7,9,12)]
a<-(1:8)
b<-(1:8)
df<-data.frame(index,a,b)
按照我的方式,可以通过以下代码添加缺失的行:
index<-t #complete index
a<-vector('numeric',12)
a<-NA
b<-vector('numeric',12)
b<-NA
empty_df<-data.frame(index,a,b) # build an complete NA dataframe
for (i in 1:12) {
if(!(df$index[i]==empty_df$index[i]))
df<-rbind(rbind(df[1:i-1,],empty_df[i,]),df[i:length(df$index),])} # comparison and revison
但是,我的解决方案有两个问题:
无法处理缺少第一行的情况。
当数据框很大时,计算将花费数小时。
所以我想知道是否有更简单的方法来处理它?</ p>
答案 0 :(得分:1)
我们可以使用merge
(base R
)或left_join
(来自dplyr
)
library(dplyr)
data.frame(index = t) %>%
left_join(., df)
或者从data.table
library(data.table)
setDT(df)[data.table(index=t), on = "index"]