2016-07-11 5 views
0

は私がddmmyyls()のパターンが1を超えることはできますか?

例えば形式の末尾に追加、他の文字や記号で10-01-0001-01-00から自分の名前に日付を含む10 data.frame秒を持っていると言います010100/sgh/d_3020100/aff/d_1

私は上記data.frameのベクトルを作成したい場合は、個別にそれらを記述することなく、それらを選択する方法はありますか?

私は日付のシーケンスのベクトルを作成し、pattern =にでこれを入れてみましたが、エラー(以下コード)を思い付いた:

Dates <- seq(as.Date("2000-01-01"),as.Date("2000-01-02"),1) 
Dates <- format(Dates,"%d%m%y") 
ls(pattern=Dates) 

In grep(pattern, all.names, value = TRUE) : 
    argument 'pattern' has length > 1 and only the first element will be used 

私はそのパターンが一つだけの値とすることができると仮定していますか?

+0

@LyzandeRいいえ、それはありません。それは名前の中の単語 "日付"と物事をマッチさせるでしょう。 – Spacedman

+0

パッケージ 'stringi'から' stri_detect'を見てください。私はこのパッケージが大好きで、一貫した構文ですべての正規表現ベースの操作を提供しています! –

+0

実際に 'ls()'に 'stri_subset'が適用されていれば、あなたが望むことができます! –

答えて

1

任意の日付文字列に一致するパターンを作成します。一つの方法は、|文字ですべての文字列を結合するためにです:

> Dates <- seq(as.Date("2000-01-01"),as.Date("2000-01-10"),1) 
> Dates 
[1] "2000-01-01" "2000-01-02" "2000-01-03" "2000-01-04" "2000-01-05" 
[6] "2000-01-06" "2000-01-07" "2000-01-08" "2000-01-09" "2000-01-10" 
> D2 = paste(Dates,collapse="|") 
> D2 
[1] "2000-01-01|2000-01-02|2000-01-03|2000-01-04|2000-01-05|2000-01-06|2000-01-07|2000-01-08|2000-01-09|2000-01-10" 

は今、私は様々なこまごまとしてワークスペースを持っている:

> ls() 
[1] "d"    "d010100foo"  "d010110bar"  "D2"    
[5] "d2000-01-01bar" "d2000-01-10bar" "d2000-02-10foo" "Dates"   
[9] "dorig"   "j"    "p"    "x"    
[13] "y"    "z"    

しかし、私はそのパターンを使用する場合、私はそれのものを得ます日付と一致:あなたが一致するものをたくさん持っていた場合

> ls(pattern=D2) 
[1] "d2000-01-01bar" "d2000-01-10bar" 

これは扱いにくい得ることができるが、その点ということは、おそらくすべてのシンに合わせて、シンプルな正規表現を書くことができますgs - [0-9]{4}-[0-9]{2}-[0-9]{2}(テストされていない)のようなもので、4桁、ダッシュ、2桁、ダッシュ、2桁の数字と一致する必要があります。

日付形式に合わせてパターンを調整します。使用したフォーマットはお勧めできません:https://xkcd.com/1179/

+0

これは完璧に働いてくれてありがとう! – Bonono

関連する問題