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

4

我觉得这是作弊,但它适用于这个简单的例子......

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

temp <- strsplit(xx, ",")

sapply(seq_along(temp), function(x) {
  t1 <- gsub("\\.", "", temp[[x]][1])
  paste(t1, temp[[x]][2], temp[[x]][-c(1, 2)], sep = ",")
})
# [1] "fefe3 fregg, ff, 34.gr. trgw"  "fefe3 fregg, ff, 34.gr. trgw" 
# [3] "fefe3 fregg, ff, 34.gr. tr.gw"

上面的基本思想是,既然你只会在逗号之前的第一个块中寻找一个句点,为什么不拆分它并在上面使用一个基本gsub的,然后将各个部分重新组合在一起。不太可能有效率......

于 2013-06-30T06:09:07.983 回答
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

我不知道打字的速度或数量,但这是一种使用 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 回答
1

gsubfngsubfn 包中用于提取从字符串开头开始且不包含逗号的最长子字符串。(如果其中没有逗号,这将是整个字符串)。然后它gsub用于删除其中的句点。(如果只希望删除子字符串中的第一个句点,则将其更改gsubsub。)

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 回答