2016-11-19 13 views
0

Rの文字列ベクトルを持っています。ファイル名を格納します。文字列の一部に基づいて文字列のベクトルを並べ替えます(RIGHT)。

ファイル名には、「YYYYMMDD」の形式で保存された日付が含まれています。 サンプルファイル名以下のとおりです。

"EXT-SM_ OPER _MIR_CLF31A_ T000000_20150506T235959_300_002_7_1.DBL.nc" "EXT-SM_ RE04 _MIR_CLF31A_ T000000_20150505T235959_300_001_7_1.DBL.nc"

ファイル名からの日付を使ってリストをソートしたいのです(その結果、最も早い日付のファイルがベクトルの最初のものになるようにします)。 残念ながら、R! 'regex'ソート基準パラメータがありません。私はどうしたらいいですか?

私のサンプルデータ:

files <- c("ext-SM_OPER_MIR_CLF31A_20150506T000000_20150506T235959_300_002_7_1.DBL.nc", 
"SMAP_L3_SM_AP_20150422_R13080_001.h5.tif","SMAP_L3_SM_AP_20150606_R13080_001.h5.tif", 
"ext-SM_OPER_MIR_CLF31A_20150530T000000_20150530T235959_300_003_7_1.DBL.nc", 
"ext-SM_RE04_MIR_CLF31A_20150418T000000_20150418T235959_300_001_7_1.DBL.nc", 
"ext-SM_RE04_MIR_CLF31A_20150419T000000_20150419T235959_300_001_7_1.DBL.nc") 
+0

_記号((?<=_))後に発生し8つの数字([0-9]{8})のシリーズを抽出することです。 –

+0

Pythonでは、私はどうなること として '輸入再 日付= re.findall('(\ dの{8}) 'ファイル名) 日付[0]' そのRに行う方法はありませんアイデア! (私はgrepを試しましたが)とにかく - 日付のベクトルを抽出したら、次に何をするべきですか? – matandked

答えて

2

これは動作するはずです:

files[order(as.Date(regmatches(files,regexpr("(?<=_)[0-9]{8}",files,perl=T)),format="%Y%m%d"))] 

編集:みんなのように同じアプローチ。日付を抽出し、日付形式に変換してから、filesの並べ替えに使用します。
正規表現の背後にある考え方は、あなたは、元のベクトルを注文するために使用することができ、日付を抽出する必要があります

2

あなたは日付を抽出するためにstringiを使用することができますし、並べ替え、すなわち

library(stringi) 
v1 <- unique(unlist(stri_extract_all_regex(files, '2015[0-9]{4}'))) 
ind <- order(as.POSIXct(v1, format = '%Y%m%d')) 
files[ind] 
#[1] "ext-SM_RE04_MIR_CLF31A_20150418T000000_20150418T235959_300_001_7_1.DBL.nc" 
#[2] "ext-SM_RE04_MIR_CLF31A_20150419T000000_20150419T235959_300_001_7_1.DBL.nc" 
#[3] "SMAP_L3_SM_AP_20150422_R13080_001.h5.tif"         
#[4] "ext-SM_OPER_MIR_CLF31A_20150506T000000_20150506T235959_300_002_7_1.DBL.nc" 
#[5] "ext-SM_OPER_MIR_CLF31A_20150530T000000_20150530T235959_300_003_7_1.DBL.nc" 
#[6] "SMAP_L3_SM_AP_20150606_R13080_001.h5.tif" 
2

ここではあなたが何ができるかです:

temp <- as.Date(sub('^\\S+\\_([0-9]{8})[T\\_][0A-Z]\\S+', '\\1', files), "%Y%m%d") 
files[order(temp)] 

# [1] "ext-SM_RE04_MIR_CLF31A_20150418T000000_20150418T235959_300_001_7_1.DBL.nc" 
# [2] "ext-SM_RE04_MIR_CLF31A_20150419T000000_20150419T235959_300_001_7_1.DBL.nc" 
# [3] "SMAP_L3_SM_AP_20150422_R13080_001.h5.tif"         
# [4] "ext-SM_OPER_MIR_CLF31A_20150506T000000_20150506T235959_300_002_7_1.DBL.nc" 
# [5] "ext-SM_OPER_MIR_CLF31A_20150530T000000_20150530T235959_300_003_7_1.DBL.nc" 
# [6] "SMAP_L3_SM_AP_20150606_R13080_001.h5.tif" 

最初ステップは、ファイル名から日付を抽出し、変数tempに挿入します。その後、日付順にベクトルfilesをソートします。 (、アンダースコア(\\_)、その後、日付の8つの数字を、ファイル名(^)の終わりに

スタート非空白文字(\\S+)を選択します。

正規表現の作品はこれを好き([0-9]{8}))、キャプチャグループ(角かっこ付き)に入れ、次の文字(Tまたはアンダースコア)に続けて0または文字をマッチさせ、キャプチャグループ(\\1)を返します。

関連する問題