如何根据完整索引将NA行添加到不完整的数据帧?

时间:2016-09-24 08:10:07

标签: r dataframe na

对于给定的不完整数据框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

但是,我的解决方案有两个问题:

  1. 无法处理缺少第一行的情况。

  2. 当数据框很大时,计算将花费数小时。

  3. 所以我想知道是否有更简单的方法来处理它?<​​/ p>

1 个答案:

答案 0 :(得分:1)

我们可以使用mergebase 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"]