2016-04-30 50 views
0

我的數據列標題看起來像這樣:合併多個日期和值對插入一個日期欄r中

日期1變量1日期2變量2 DATE3變量3 Date4 Variable4

Image of data

每個的長度日期/變量對是不同的。

有誰知道如何將所有日期值,使「日期」是這樣的一列組合:

日期變量1變量2變量3變量4

+0

在你的過程之前和之後添加一些示例數據,所以它將清楚你正在嘗試做什麼。這樣你會得到更好的答案。 – Hypnobrew

+2

根據示例顯示預期的輸出效果會更好。請使用'dput'來顯示數據而不是圖像。 – akrun

回答

0

我想這可能是一個有趣的練習。

我嘲笑你的一些數據到CSV。

> raw_input <- read.csv('date variable sample.csv') 
> raw_input 
       Date Variable.1   Date2 Variable.2   Date4 Variable4 
1  9/12/2009   82  9/12/2009   41  15/12/2009   0 
2 9/12/2009 12:00   80 9/12/2009 12:00   38 23/03/2010 16:00  71 
3 9/12/2009 16:00   80 9/12/2009 16:00   42 25/03/2010 21:00  73 

然後我創建了一個設定1,set.2 ...來分隔日期,變量對成d不同的數據幀。

> set.1 <- raw_input[c('Date','Variable.1')] 
> colnames(set.1) <- c('Date', 'Variable') 

      Date Variable 
1  9/12/2009  82 
2 9/12/2009 12:00  80 
3 9/12/2009 16:00  80 

> set.2 <- raw_input[c('Date2', 'Variable.2')] 
> colnames(set.2) <- c('Date', 'Variable') 

      Date Variable 
1  9/12/2009  41 
2 9/12/2009 12:00  38 
3 9/12/2009 16:00  42 

> set.4 <- raw_input[c('Date4', 'Variable4')] 
> colnames(set.4) <- c('Date', 'Variable') 

       Date Variable 
1  15/12/2009  0 
2 23/03/2010 16:00  71 
3 25/03/2010 21:00  73 

然後我用Reduce()合併了所有的數據幀。

> fin <- Reduce(function(x, y) merge(x, y, all=T, by=c("Date")), list(set.1, set.2, set.4)) 
> fin 
       Date Variable.x Variable.y Variable 
1  9/12/2009   82   41  NA 
2 9/12/2009 12:00   80   38  NA 
3 9/12/2009 16:00   80   42  NA 
4  15/12/2009   NA   NA  0 
5 23/03/2010 16:00   NA   NA  71 
6 25/03/2010 21:00   NA   NA  73 

您還可以規範化(忽略時間),以便您可以將日期分組,但您可能不想這樣做。

快樂編碼!

+0

我做了上述操作,並在使用'Reduce()'函數之前使用'na.omit()'在每個數據幀中刪除NA。 – Jake