替换R中的逗号和点

Nil*_*lve 11 r numeric vector

我有一整列数字,包括数千和逗号的点分隔符,而不是点作为一个令人沮丧的分隔符.当我尝试从中创建数字列时,我丢失了所有数据.

var1 <- c("50,0", "72,0", "960,0", "1.920,0", "50,0", "50,0", "960,0")
df <- cbind(var1, var2 = as.numeric(gsub(".", "", as.character(var1))))
Run Code Online (Sandbox Code Playgroud)

并结束:

 var1      var2
[1,] "50,0"    NA  
[2,] "72,0"    NA  
[3,] "960,0"   NA  
[4,] "1.920,0" NA  
[5,] "50,0"    NA  
[6,] "50,0"    NA  
[7,] "960,0"   NA 
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

Jos*_*ich 39

您需要"."在正则表达式中转义,并且需要"."在转换为数字之前用逗号替换逗号.

> as.numeric(gsub(",", ".", gsub("\\.", "", var1)))
[1]   50   72  960 1920   50   50  960
Run Code Online (Sandbox Code Playgroud)

  • ``format(var1, decimal.mark = '.')`` 是另一种将逗号变成点的方法。不能说优缺点,这只是一个附带评论。 (4认同)

MER*_*ose 5

对于像我这样scan()的东西,我最喜欢,因为它很容易理解.只是用

scan(text=var1, dec=",", sep=".")
Run Code Online (Sandbox Code Playgroud)

唉,它不会比gsub()另一方面看起来过于强大而快.因此,另一个快速的选择是sub():

as.numeric(sub(",", ".", sub(".", "", var1, fixed=TRUE), fixed=TRUE))
Run Code Online (Sandbox Code Playgroud)

以防万一:当您var1直接从文件中读取时,只需使用指定的分隔符读取它:read.table("file.txt", dec=",", sep=".")