填补表格中的空白

时间:2014-09-23 12:03:22

标签: arrays r date time

我有两张桌子。一个有从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

现在,我需要将第二个表的第2行和第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 个答案:

答案 0 :(得分: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)]