我有两张桌子。一个有从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')
我该怎么办?
答案 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)]