如何删除这些字符串中第一个逗号之前的句点?
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))
开始,删除了所有句号。如何更改它以指定“仅第一个逗号之前的时段”?
答案 0 :(得分: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
,然后把它们放在一起重新走到一起。不太可能有效....
答案 1 :(得分: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
指的是第一组答案 2 :(得分:1)
这使用gsubfn package中的gsubfn
来提取从字符串开头开始并且不包含逗号的最长子字符串。 (如果没有逗号,这将是整个字符串)。然后,它使用gsub
删除其中的句点。 (如果只希望删除子字符串中的第一个句点,请将gsub
更改为sub
。)
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"
答案 3 :(得分:1)
我不知道速度或打字数量,但这是使用qdap的beg2char
和char2end
函数的方法:
## 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"