2016-09-24 8 views
2

は、与えられた不完全なデータフレームdfと完全なインデックスtについて:私の方法により、完全なインデックスに基づいて不完全なデータフレームにNA行を追加するにはどうすればよいですか?

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. データフレームが大きい場合、コンピューティングには数時間かかることがあります。

私はそれに対処する簡単な方法があるのでしょうか?

答えて

1

我々は(dplyrから)mergebase R)またはleft_join

library(dplyr) 
data.frame(index = t) %>% 
       left_join(., df) 

それとも私がしたい正確に何であるdata.table

library(data.table) 
setDT(df)[data.table(index=t), on = "index"] 
+1

から参加してこれを行うことができます。ところで、 'left_join(data.frame(index = t)、df)'は、あなたの 'data.frame(index = t)%>% left_join(。、df)'と同じですか? –

+0

@ YQ.Wangはい、そうです。 dplyrでどのように連鎖できるかを示すために、 '%>% 'を使用しました。 – akrun

関連する問題