【问题标题】:Replacing commas and dots in R替换R中的逗号和点
【发布时间】:2014-01-28 10:50:18
【问题描述】:

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

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))))

最后:

 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 

我做错了什么?

【问题讨论】:

    标签: r vector numeric


    【解决方案1】:

    您可以使用“readr”包中的“type_convert”函数。我正在阅读 ODS 文件(语言环境葡萄牙语),并转换数字:

    library('readODS')
    library('tidyverse')
    data <- read_ods('mod-preditivo.ods', sheet=1,col_names = TRUE,range='a1:b30',col_types=NA)
    df <- type_convert(data,trim_ws=TRUE,col_types = cols(Pesos=col_integer(),Alturas=col_double()),locale = locale(decimal_mark = ","))
    str(df)
    

    【讨论】:

      【解决方案2】:

      对于这样的事情我最喜欢scan(),因为它很容易理解。只需使用

      scan(text=var1, dec=",", sep=".")
      

      唉,它并不比gsub() 快,另一方面,它似乎被压倒了。因此,另一个快速的选项是sub()

      as.numeric(sub(",", ".", sub(".", "", var1, fixed=TRUE), fixed=TRUE))
      

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

      【讨论】:

        【解决方案3】:

        您需要对正则表达式中的"." 进行转义,并且需要将逗号替换为".",然后才能转换为数字。

        > as.numeric(gsub(",", ".", gsub("\\.", "", var1)))
        [1]   50   72  960 1920   50   50  960
        

        【讨论】:

        • format(var1, decimal.mark = '.') 是将逗号更改为点的另一种方法。不能说利弊,这只是一个旁注。
        • 当我向这个函数传递一个数值向量时,它返回错误`UseMethod中的错误(“filter_”):没有适用于“filter_”的方法应用于类“c('double', '数字')"`
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多