2014-09-23 85 views
0

我有兩個表。從2012年到2014年有3小時的信息。它看起來像這樣:填補了表中的空白

1 01.06.2012 00:00 10 0 
2 01.06.2012 03:00 10 0 
3 01.06.2012 06:00 10 6 
4 01.06.2012 09:00 7,5 0 
5 01.06.2012 12:00 6 2,5 
6 01.06.2012 15:00 6 0 
7 01.06.2012 18:00 4 0 
8 01.06.2012 21:00 4 0 
9 02.06.2012 00:00 0 0 
10 02.06.2012 03:00 0 0 

其他表是同一時間,但與1分鐘的時間,它沒有數據。

1 01.06.2012 00:00 3 1 
2 01.06.2012 00:01 3 1 
3 01.06.2012 00:01 3 1 
4 01.06.2012 00:03 3 1 
5 01.06.2012 00:03 3 1 
6 01.06.2012 00:05 3 1 
7 01.06.2012 00:05 3 1 
8 01.06.2012 00:07 3 1 
9 01.06.2012 00:08 3 1 
10 01.06.2012 00:09 3 1 
11 01.06.2012 00:10 3 1 

現在,我需要第二個,第二個表的第3行的值相關聯的第一,所以如果從第二個表中的時間戳timestamp(i)和第一臺的timestamp(i+1)之間將採取B(i)C(i)並複製它們。 我有這個代碼,但正如您從上面可以看到的,它不會將正確的值放入。3 & 1而不是10 & 0

clouds <- read.csv('~/2012-2014 clouds info.csv', sep=";", header = FALSE) 
cloudFull <- read.csv('~/2012-2014 clouds.csv', sep=";", header = FALSE) 

for (i in 1:nrow(cloudFull)){ 
    dateOne <- strptime(cloudFull[i,1], '%d.%m.%Y %H:%M') 

    for (j in 1:nrow(clouds)){ 
    bottomDate = strptime(clouds[j,1], '%d.%m.%Y %H:%M') 
    upperDate = strptime(clouds[j+1,1], '%d.%m.%Y %H:%M') 
    if ((dateOne >= bottomDate) && (dateOne < upperDate)) { 
     cloudFull[i,2] <- clouds[j,2] 
     cloudFull[i,3] <- clouds[j,3] 
     break 

    } 

    } 
} 

write.csv(cloudFull, file = 'cc.csv') 

我該怎麼辦?

+1

假設第二數據集是cloudFull,你的代碼爲我工作,並給出了預期的結果。編寫像這樣循環的一個問題是它們有混淆工作空間的副作用,所以也許另一個變量導致問題。重新啓動你的會話或刪除所有變量,並開始新鮮 – rawr 2014-09-23 12:41:24

+0

試圖做到這一點,仍然有相同的結果。我甚至不知道3和1來自哪裏。 – 2014-09-24 04:35:59

回答

0

以下可以是有益的:

ddf = rbind(df1, df2) 
ddf$V2 = as.Date(as.character(ddf$V2), format="%d.%m.%Y") 
ddf = cbind(ddf, do.call(rbind, strsplit(as.character(ddf$V3),':'))) 
ddf = ddf[order(ddf$"1",ddf$"2"),] 
ddf = ddf[!duplicated(ddf$V3),] 
ddf 
    V1   V2 V3 V4 V5 1 2 
1 1 2012-06-01 00:00 10 0 00 00 
12 2 2012-06-01 00:01 3 1 00 01 
14 4 2012-06-01 00:03 3 1 00 03 
16 6 2012-06-01 00:05 3 1 00 05 
18 8 2012-06-01 00:07 3 1 00 07 
19 9 2012-06-01 00:08 3 1 00 08 
20 10 2012-06-01 00:09 3 1 00 09 
21 11 2012-06-01 00:10 3 1 00 10 
2 2 2012-06-01 03:00 10 0 03 00 
3 3 2012-06-01 06:00 10 6 06 00 
4 4 2012-06-01 09:00 7 5 09 00 
5 5 2012-06-01 12:00 6 2 12 00 
6 6 2012-06-01 15:00 6 0 15 00 
7 7 2012-06-01 18:00 4 0 18 00 
8 8 2012-06-01 21:00 4 0 21 00 

列 '1' 和 '2' 是從V3和可以容易地與命令刪除:

ddf = ddf[,-c(6,7)] 
+0

但如果你看V4超過第一行,它仍然是不正確的?我不知道3和1從哪裏來。 – 2014-09-24 04:31:34