2014-09-23 4 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 

Теперь мне нужны значения 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

в предположении, что второй набор данных cloudFull, ваш код работает для меня и дает желаемые результаты. одна проблема с такими петлями записи заключается в том, что они имеют побочный эффект загромождения рабочего пространства, поэтому, возможно, другая переменная вызывает проблемы. перезагрузите сеанс или удалите все переменные и запустите новый – rawr

+0

, попытавшись сделать это, все же приходят с теми же результатами. Я даже не понимаю, откуда взялись 3 и 1. –

ответ

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. –