2017-03-18 89 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

你是怎麼得到這個數據?你是否從某個文件中讀取它?如果可以,請提供真實的意見 – Rentrop

回答

0

一種方法是使用zoo包中取出來港,

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飛行的幫助:

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

可以使用lag功能dplyr的日期粘貼到一起,然後在X列中刪除的NA ...

library(dplyr) 
df <- df %>% mutate(date=paste(lag(date,2),lag(date),date)) %>% filter(!is.na(x))