2017-03-18 10 views
0

私はこのデータフレームに日付列を複数の行に分割しました。私は、連結または日付の行をマージし、他の列Rプログラミングは3行おきに連結し、NAを取り除く

df <- data.frame(date = rep(c("Nov","22","2012"),3),x = rep(c(NA,NA,12345),3)) 
     date x 
     1 Nov NA 
     2 22 NA 
     3 2012 12345 
     4 Nov NA 
     5 22 NA 
     6 2012 12345 
     7 Nov NA 
     8 22 NA 
     9 2012 12345 

望ましい結果

 df <- data.frame(date = rep(("Nov 22 2012"),3),x = rep(12345,3)) 

      date x 
    1 Nov 22 2012 12345 
    2 Nov 22 2012 12345 
    3 Nov 22 2012 12345 

+0

...その後x列でのNAを削除し、一緒に日付を貼り付けるdplyrにlag機能を使用することができますか?いくつかのファイルからそれを読んでいますか?もしそうなら、本当の入力を提供してください – Rentrop

答えて

0

一つの方法は、zooパッケージを使用することですあなたに感謝からのNAを削除する

library(zoo) 

new_df <- as.data.frame(rollapply(df, 3, by = 3, function(i)na.omit(c(i)))) 
final_df <- cbind(date = do.call(paste, new_df[1:3]), new_df[-c(1:3)]) 

final_df 
#   date V4 
#1 Nov 22 2012 12345 
#2 Nov 22 2012 12345 
#3 Nov 22 2012 12345 
0

data.frameの構造があなたの例とまったく同じ場合、このm IGHTヘルプ:

df <- do.call(rbind, 
       lapply(seq(1, nrow(df), by = 3), 
        function(i) 
          data.frame(date = paste(df[i:(i+2),1], 
                collapse = "-"), 
             x = na.omit(df[i:(i+2), 2]) 
             ) 
        ) 
      ) 
#df 
#   date  x 
#1 Nov-22-2012 12345 
#2 Nov-22-2012 12345 
#3 Nov-22-2012 12345 
0

あなたはどのようにこのデータを得るのですか

library(dplyr) 
df <- df %>% mutate(date=paste(lag(date,2),lag(date),date)) %>% filter(!is.na(x)) 
関連する問題