2017-08-08 7 views
0

これはおそらく簡単な問題ですが、私はこのようになりますrasterbrickから日付を抽出し、トラブルを抱えている:ラスターブリックから時間を抽出するには?

> ndviStack 
    class  : RasterBrick 
    dimensions : 315, 317, 99855, 221 (nrow, ncol, ncell, nlayers) 
    resolution : 30, 30 (x, y) 
    extent  : 232611.4, 242121.4, 2298929, 2308379 (xmin, xmax, 
        ymin, ymax) 
    coord. ref. : +proj=utm +zone=16 +datum=WGS84 +units=m +no_defs 
        +ellps=WGS84 +towgs84=0,0,0 
    data source : /Users/vaughnsmith/Desktop/CR_Y_Data/Yucatan/area1/data/ndvi_stack_00_15.grd 
    names  : LE70200462000007, LE70200462000055, LE70200462000119, 
        LE70200462000183, LE70200462000279, LE70200462000295, 
        LE70200462000311, LE70200462001041, LE70200462001073, 
        LE70200462001105, LE70200462001169, LE70200462001185, 
        LE70200462001201, LE70200462001249, LE70200462001281, ... 

    min values :    2077,    -758,   -1310,    664,    4413,    2121,    1294,    2312,    1138,    -639,    2433,    3138,    991,    150,    1384, ... 
    max values :   10000,    8087,   20000,    8729,    8989,   20000,    9277,   20000,    7806,    8489,    8839,   20000,    9345,    9281,    9700, ... 
    time  : 2000-01-07, 2015-12-26 (min, max) 

最後の行、時間が、私は必要なものです。私はそれが名前を返す名前(ndviStack)関数と同じくらい簡単かもしれないと思ったが、そうではない。誰かが助けてくれますか?ありがとうございました。

+0

あなたは 'ndviStack $ time'のようなものを試しましたか? – loki

答えて

1

names(ndviStack)で取得できるレイヤ名からこれを実現できます。
まず再現可能な例を取得するためのいくつかの名前:

nams <- c("LE70200462000007", "LE70200462000055", "LE70200462000119", 
"LE70200462000183", "LE70200462000279", "LE70200462000295", 
"LE70200462000311", "LE70200462001041", "LE70200462001073", 
"LE70200462001105", "LE70200462001169", "LE70200462001185") 

as.Date

ファーストを使用してas.POSIXct

nams <- substr(nams, nchar(nams)-6, nchar(nams)) 
datesfromnames <- as.POSIXct(nams, format = "%Y%j", tz = "UTC") 
# "2000-01-07 UTC" "2000-02-24 UTC" "2000-04-28 UTC" "2000-07-01 UTC" "2000-10-05 UTC" 
# "2000-10-21 UTC" "2000-11-06 UTC" "2001-02-10 UTC" "2001-03-14 UTC" "2001-04-15 UTC" 
# "2001-06-18 UTC" "2001-07-04 UTC" 

を使用して、我々は年と日に名を分割します。

nams <- substr(nams, nchar(nams)-6, nchar(nams)) 
years <- substr(nams, 1, 4) 
days <- substr(nams, 5, 7) 

はその後、我々は、彼らがここ数年、年間で一日の数の数を保持data.frame

dates <- data.frame(years, days) 
dates 
# years days 
# 1 2000 007 
# 2 2000 055 
# 3 2000 119 
# 4 2000 183 
# 5 2000 279 
# 6 2000 295 
# 7 2000 311 
# 8 2001 041 
# 9 2001 073 
# 10 2001 105 
# 11 2001 169 
# 12 2001 185 

を作成します。これらの変数は、Dateオブジェクトの生成に使用できます。

dates$dates <- apply(dates, 1, 
        function(x){as.Date(as.numeric(x[2]), origin = paste0(x[1], "-01-01"))}) 
as.Date(dates$dates-1, origin = '1970-01-01') 

# years days  dates 
# 1 2000 007 2000-01-07 
# 2 2000 055 2000-02-24 
# 3 2000 119 2000-04-28 
# 4 2000 183 2000-07-01 
# 5 2000 279 2000-10-05 
# 6 2000 295 2000-10-21 
# 7 2000 311 2000-11-06 
# 8 2001 041 2001-02-10 
# 9 2001 073 2001-03-14 
# 10 2001 105 2001-04-15 
# 11 2001 169 2001-06-18 
# 12 2001 185 2001-07-04 

関連する問題