12

Rでスペース区切りの文字列を二重引用符で分割しようとしましたが、成功しませんでした。文字列の例は次のとおりです。

雨量 降雪量 「水路貯留」 「小川貯水」

これらは後続のデータと一致する必要がある列見出しであるため、重要です。このサイトには、これを行う方法に関する他の提案がありますが、R では機能しないようです。1 つの例:

一重引用符または二重引用符で囲まれていない場合にスペースを使用して文字列を分割するための正規表現

ここに私が試してきたいくつかのコードがあります:

str <- 'rainfall snowfall "Channel storage" "Rivulet storage"'
regex <- "[^\\s\"']+|\"([^\"]*)\""
split <- strsplit(str, regex, perl=T)

私が欲しいのは

[1] "rainfall" "snowfall" "Channel storage" "Rivulet storage"

しかし、私が得るものは:

[1] ""  " " " " " "

ベクトルは適切な長さです (これは励みになります) が、もちろん文字列は空であるか、単一のスペースを含んでいます。助言がありますか?

前もって感謝します!

4

3 に答える 3

17

scanあなたのためにこれを行います

scan(text=str, what='character', quiet=TRUE)
[1] "rainfall"        "snowfall"        "Channel storage" "Rivulet storage"
于 2012-11-29T14:54:35.430 に答える
5

mplourde が言ったように、使用しますscan。それははるかにクリーンなソリューションです(保持したくない場合を除き\"、つまり...)

これを行うために正規表現を使用したい場合 (または で簡単に解決できないものscan) は、まだ間違った見方をしています。あなたの正規表現はあなたが望むものを返すので、それをあなたの中で使用すると、strsplit保持したいものすべてが切り取られます.

これらのシナリオでgregexpは、一致の開始位置を返し、一致の長さを属性として追加する関数を確認する必要があります。この結果は、次のregmatches()ように関数に渡すことができます。

str <- 'rainfall snowfall "Channel storage" "Rivulet storage"'
regex <- "[^\\s\"]+|\"([^\"]+)\""

regmatches(str,gregexpr(regex,str,perl=TRUE))

ただし、mplourde の解が返されるときに文字ベクトルだけが必要な場合は、それを選択してください。そして、とにかくそれがあなたが求めているものです。

于 2012-11-29T15:09:41.917 に答える
2

パッケージ gsubfn から strapply を使用できます。ストラップでは、文字列を分割するのではなく、一致する文字列を定義できます。

str <- "rainfall snowfall 'Channel storage' 'Rivulet storage'"
strapply(str,"\\w+|'\\w+ \\w+'",c)[[1]]

[1] "rainfall"          "snowfall"          "'Channel storage'" "'Rivulet storage'"
于 2012-11-29T21:17:27.107 に答える