2

我需要阅读几个 Excel 文件并使用 gdata 包。不幸的是,这些文件是懒惰的,有些带有“,”小数/千位分隔符,有些带有“。” 有些没有。

为了让您了解,这些数字可能如下所示:

#Five Times 1000.1 and four times 1000.0
x <- c("1,000.1","1.000.1","1000.1","1000,1","1.000,1","1000","1,000","1.000","1000.0")
x

有没有一种通用的方法可以将它们分别转换为 1000.1 和 1000.0?我考虑过使用 gsub() 和正则表达式。

第一个 gsub() 将“,”替换为“。” 对于第二个 gsub() ,可能会以所有“。”的方式完成正则表达式。右边的三个数字被删除,而另一个“。” 被存管。

但是我不熟悉正则表达式,也不知道该怎么做。有人可以帮忙吗?有没有更简单的方法来清理 Excel 工作表?

谢谢!

4

1 回答 1

2

使用gsub例如:

 as.numeric(gsub('([0-9])[,|.]?([0-9]{3})[,|.]?','\\1\\2.',x))
[1] 1000.1 1000.1 1000.1 1000.1 1000.1 1000.0 1000.0 1000.0 1000.0

对于这种特定情况,您甚至可以将正则表达式简化为:

 as.numeric(gsub('^(1)[,|.]?(0{3})[,|.]?','\\1\\2.',x))

在这里,我去除了最后一个正则表达式:

 ^         | 1  | [,|.]?          |   0{3}    |    [,|.]?          |   (0|1)?
 beginwith | 1  | comma or point  |  3 zeros  |   comma or point   | 0 or 1 or nothing
于 2013-06-01T16:00:15.443 回答