删除R中的小数

时间:2016-04-19 12:54:27

标签: regex r

我有一些列值如下:

HG.1T.1
HG.1T
HG.1T.2
HG.1T.3
HG.1T.5
HG.1T.11

我想删除第二个小数后的所有内容并尝试使用

 result<-sapply(strsplit(rownames(trial),"\\."),function(x),paste0,head(x,-1),collapse="."))

最后以

结束
HG.1T
HG
HG.1T
HG.1T
HG.1T
HG.1T

它工作正常,但是对于第二个值,因为只有一个十进制值,它会删除它。我希望这只在两位小数的实例中工作,并让一个十进制值保持原样。我怎么做?它应该是

HG.1T
HG.1T
HG.1T
HG.1T
HG.1T
HG.1T

4 个答案:

答案 0 :(得分:3)

我们可以使用sub匹配.后跟一个或多个数字字符(\\d+)直到字符串的结尾($)并替换为{ {1}}。

''

或者我们再捕获一个非点字符(sub("\\.\\d+$", "", df1$Col) #[1] "HG.1T" "HG.1T" "HG.1T" "HG.1T" "HG.1T" "HG.1T" ),后跟一个[^.]+后跟一个或多个非点字符(.)作为一个组并替换为反引用([^.]+)。

\\1

数据

sub("(^[^.]+[.][^.]+).*", "\\1", df1$Col)
#[1] "HG.1T" "HG.1T" "HG.1T" "HG.1T" "HG.1T" "HG.1T"

答案 1 :(得分:3)

如果您不想使用正则表达式,

sapply(df$Col1, function(i) paste(strsplit(i,"\\.")[[1]][1:2],collapse = "."))
# HG.1T.1    HG.1T  HG.1T.2  HG.1T.3  HG.1T.5 HG.1T.11 
# "HG.1T"  "HG.1T"  "HG.1T"  "HG.1T"  "HG.1T"  "HG.1T" 

答案 2 :(得分:3)

使用regexpr:

regmatches(df1$Col,regexpr("[A-Z]{2}[.]{1}[0-9]{+}[T]",df1$Col))

[1] "HG.1T" "HG.1T" "HG.1T" "HG.1T" "HG.1T" "HG.1T"

答案 3 :(得分:1)

尝试此操作以删除第二个小数后的所有内容:

sub("^(([^.]+\\.){2}).*", "\\1", "HG.1T.11")

要复制OP在其输出中指示的内容,以下内容将起作用:

sub("^(([^.]+|\\.){3}).*", "\\1", "HG.1T.11")