Rを使用して情報を抽出するのに必要なファイル名のリストが多数あります。情報は複数のダッシュとアンダースコアで区切ります。区切り文字間の文字数が一貫していないという事実(情報の順序は、区切り文字が使用されている(希望通り)と同じように)が変わらないという事実に対応する方法を見つけ出すのに問題があります。例えば複数区切り文字で区切られた文字列の複数の変数への分割R
:
f <- data.frame(c("EI-SM4-AMW11_20160614_082800.wav", "PA-RF-A50_20160614_082800.wav"), stringsAsFactors = FALSE)
colnames(f)<-"filename"
f$area <- str_sub(f$filename, 1, 2)
f$rec <- str_sub(f$filename, 4, 6)
f$site <- str_sub(f$filename, 8, 12)
これは、最初のファイルの正しい結果が、2番目のために誤った結果を生成します。
私は「stringr」と「stringi」のパッケージを使用してみました、そしてハードに値をコーディングすることは動作しませんので、私のような両方のパッケージを使用して厄介なソリューションを作ってみたことを知っていました:
f$site <- str_sub(f$filename,
stri_locate_last(f$filename, fixed="-")[,1]+1,
stri_locate_first(f$filename, fixed="_")[,1]-1)
おそらくregex(これは私が痛感している)を含むよりエレガントな(そして堅牢な)方法が必要であるように感じます。
私は他の例(Extract part of string (till the first semicolon) in R、R: Find the last dot in a string、Split string using regular expressions and store it into data frame)を見てきました。
ご意見/ご要望があれば幸いです。
自然言語には、これらのいずれの取り組みとも一致する説明はありません。 2つのダッシュのインスタンスと2つのアンダースコアのインスタンスがあり、2つまたは3つのアイテムのみが必要です。 _Describe_失敗したコードを提示するのではなく、何をあなたに伝えますか? –