2014-04-10 1 views
2

10570 개의 요소가있는 Large SpatialPointDataFrame이 있습니다. 각 행은 연관된 날짜가있는 지점입니다 (일부 행은 같은 날짜 임). 이 객체는 4760 개의 열 (RasterStack과 점 사이의 extract() 함수 출력)이며 각 열은 연관된 값 (온도)이있는 날짜에 해당합니다.data.frame을 사용한 R 코드 최적화

간단한 예 :

DATE2  BICHO X2000.01.01 X2000.01.02 (...) X2012.12.31 
2009-04-08 Woody  20.7   19.2  ...   9.5 
2009-04-09 Woody  20.7   19.2  ...   9.5 
2009-04-10 Woody  20.7   19.2  ...   9.5 
2004-11-30 Woody  20.7   19.2  ...   9.5 
2004-12-01 Buzz  20.7   19.2  ...   9.5 
2004-12-02 Buzz  20.7   19.2  ...   9.5 

내가하고 싶은 것은 각 해당 날짜의 온도를 포함이 data.frame에 새 열 (TP)를 만드는 것입니다.

for(i in 11:4760){ 
    datas<-str_sub(colnames([email protected][i]), start=2,end=11L) 
    datas<-format(as.Date(datas, "%Y.%m.%d"),"%Y-%m-%d") 
    for(j in seq_along([email protected]$TP)){ 
    print(c(i,j)) #just a print to see how fast is the code 
    if(as.character(factor(pts$DATE2[j]))==datas){ 
     [email protected][j,]$TP<[email protected][j,][i] 
    } 
    } 
} 

코드는 작동하지만 느린데 누구나 최적화를 도와 줄 수 있습니까? 거기 DATE2 날짜와 일치하는 컬럼에는 날짜가 없지만, 나는이 희망

+0

열 1 "DATE2"]의 날짜가 있고 날짜는 각 열에있다 [ "X2000.01.01"]. "해당 날짜"로 어느 것을 의미합니까? – Henk

+0

해당 날짜는 DATE2입니다. 내 목표는 (열에서) 행 날짜에 해당하는 값을 찾는 것입니다. – JMarcelino

+0

분명하지 않습니다. 'DATE2' 칼럼에서 칼럼 명 날짜와 날짜 - 값을 일치 시키려고합니까? 또한 칼럼이 순차적으로 순차적으로 나열되기 때문에 그 중 하나를 변환 할 필요가 없다는 점을 지적하고자합니다. 열 번호를 가져 와서 일부 날짜/시간 함수를 사용하여 그 값을 기본 날짜에 "일"로 추가하십시오. –

답변

0

당신을 위해 작동합니다

library(data.table) 
library(lubridate) 
df = data.table(df) 
dfm = data.table:::melt.data.table(df, 
           id.var = c("DATE2","BICHO"), 
           variable.name = "date", 
           value.name = "TP") 
dfm[,date := gsub("X","",date)] 
dfm[,date := ymd(date)] 
dfm[,DATE2 := ymd(DATE2)] 
dfm[DATE2 == date,] 
+0

코드는 DATE2, BICHO, date 및 tp와 같이 4 개의 열이있는 테이블을 제공합니다. date는 NAs로 채워지는 열이고 tp는 TIME2, LAT2, LONG2, NAME_0 및 NAME_1의 df 값으로 채워진 열입니다. – JMarcelino

+0

오류를 재현 할 수 없습니다. lubridate 및 data.table 라이브러리를 설치 했습니까? DATE2 일치하는 날짜가있는 데이터 샘플을 제공하면 도움이됩니다. – Henk