4

これらの文字列の最初のコンマの前にあるピリオドを削除するにはどうすればよいですか?

 xx <- c("fefe.3. fregg, ff, 34.gr. trgw", 
          "fefe3. fregg, ff, 34.gr. trgw",
          "fefe3 fregg, ff, 34.gr. tr.gw")

望ましい出力:

    "fefe3 fregg, ff, 34.gr. trgw"
    "fefe3 fregg, ff, 34.gr. trgw"
    "fefe3 fregg, ff, 34.gr. tr.gw" 

gsub("\\.","", xx))すべてのピリオドを削除するから始めました。「最初のコンマの前のピリオドのみ」を指定するように変更するにはどうすればよいですか?

4

4 に答える 4

3

これを試して:

gsub("\\.(.*,.*)","\\1", xx)
[1] "fefe3 fregg, ff, 34.gr. trgw" 
[2] "fefe3 fregg, ff, 34.gr. trgw" 
[3] "fefe3 fregg, ff, 34.gr. tr.gw"

正規表現は次のように機能します。

  • \\.ピリオドを探す
  • (.*,.*)他のテキスト内のコンマを探し、それをグループ化します
  • \\1最初のグループを指します
于 2013-06-30T05:38:06.077 に答える
1

これはgsubfn パッケージgsubfnで使用され、文字列の先頭から始まり、カンマを含まない最長の部分文字列を抽出します。(コンマが含まれていない場合、これは文字列全体になります)。次に、その中のピリオドを削除するために使用します。(部分文字列内の最初のピリオドのみを削除する場合は、 を に変更します。) gsubgsubsub

library(gsubfn)
gsubfn("^[^,]*", ~ gsub("\\.", "", x), xx)

結果は次のとおりです。

[1] "fefe3 fregg, ff, 34.gr. trgw" 
[2] "fefe3 fregg, ff, 34.gr. trgw" 
[3] "fefe3 fregg, ff, 34.gr. tr.gw"
于 2013-06-30T11:05:04.087 に答える
1

タイピングの速度や量についてはわかりませんが、qdapbeg2charchar2end関数を使用したアプローチは次のとおりです。

## xx <- c("fefe.3. fregg, ff, 34.gr. trgw", 
##     "fefe3. fregg, ff, 34.gr. trgw",
##     "fefe3 fregg, ff, 34.gr. tr.gw")

library(qdap)

paste0(gsub("\\.", "", beg2char(xx, ",")), char2end(xx, ",", include=TRUE))

## > paste0(gsub("\\.", "", beg2char(xx, ",")), char2end(xx, ",", include=TRUE))
## [1] "fefe3 fregg, ff, 34.gr. trgw"  "fefe3 fregg, ff, 34.gr. trgw" 
## [3] "fefe3 fregg, ff, 34.gr. tr.gw"
于 2013-06-30T13:44:46.063 に答える