2014-09-23 5 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 분의 기간이며 데이터가 없습니다. 두 번째 테이블에서 타임 스탬프 timestamp(i)하고 첫 번째 테이블의 timestamp(i+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 행의 값이 필요합니다 B(i)C(i)으로 복사하십시오. 이 코드가 있지만 위의 코드에서 볼 수 있듯이 10 & 0 대신 3 & 1에 올바른 값을 넣지는 않습니다.

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

제 2 데이터 세트가 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이 어디서 왔는지 알지 못한다. –

관련 문제