2013-06-30 180 views
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

我觉得这是一种欺骗行为,但它工作在这个简单的例子....

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,然后将它们放在一起。不太可能有效......

+0

非常感谢!这对我的实际使用情况也有帮助。我认为可能会有一些解决问题的方法(我是一个懒惰的打字员),但是这让我走上了路,在这种情况下这就是最重要的。再次感谢! – Ben

+0

@Ben,我确定有,但有时候对正则表达式的思考太多让我脑筋急转弯。 :) – A5C1D2H2I1M1N2O1R2T1

+0

嘿!我确切地知道你的意思。我是一个完整的正规表达白痴。 – Ben

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指第一组
+1

感谢您的详细信息,我明白这一点。在你的界面中,我仍然会在第一个项目中得到一个句点:''fefe3。fregg,ff,34.gr. trgw“'(当你的示例数据有点不同时,你可能已经对我的Q进行了编辑,这个混乱!) – Ben

+0

@Ben,你可以在这里嵌入Andrie的'gsub'并得到你的答案:'gsub(“\\。(。*,。*)”,“\\ 1”,gsub(“\\ 。(。*,。*)“,”\\ 1“,xx))'。这取决于你知道你的第一个逗号之前你可以期待多少段时间,或者你的写作递归函数的技能...... – A5C1D2H2I1M1N2O1R2T1

+1

@AnandaMahto,谢谢,我不知道有多少期望,我不在那里但在编写递归函数方面...... – Ben

1

这使用gsubfn package中的gsubfn来提取从字符串开头开始并且不包含逗号的最长子字符串。 (如果没有逗号,这将是整个字符串)。然后它使用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" 
+0

谢谢,'gsubfn'很吸引人! – Ben

1

我不知道的速度或量打字,但这里是一种使用qdap的beg2charchar2end函数的方法:

## 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" 
+0

谢谢,这个解决方案对我来说绝对是最容易理解的。 – Ben

相关问题