【问题标题】:R: Reading number with comma and negative number with negative sign at the endR:读取带逗号的数字和末尾带负号的负数
【发布时间】:2015-09-15 19:09:45
【问题描述】:

我在读取包含奇怪格式数字的 CSV 文件时遇到问题。我想将该值作为数字读入 R。

我通常使用 read.csv 将 CSV 文件读取到 DF 中。

问题是其中一列将该值作为因子变量读取。

示例: CSV 文件:

713,78-;713,78;577,41-;577,41;123,82-;123,82 

将其读入数据框后,结果是:

[1] 713,78- 713,78  577,41- 577,41  123,82- 123,82 
6 Levels: 713,78- 713,78  577,41- 577,41  123,82- 123,82  

在上面说明的情况下,我想要以下输出:

[1] -713.78  713.78 -577.41  577.41 -123.82  123.82

列号是数值类。

【问题讨论】:

  • 打电话给你的数据提供者并对他们大喊大叫
  • 实际上,这些是有效的负小数……在 荷兰语 中。我尝试将语言环境设置为en_NL,但没有任何东西会因为阅读#而受到尊重。我可以为readr做公关

标签: r read.csv


【解决方案1】:

它应该可以正常工作:

fixData <- function(x)
{
  x <- gsub(',', '.', x)
  x[grep('-$', x)] <- paste0('-', x[grep('-$', x)])
  x <- as.numeric(sub('-$', '', x))
  return(x)
}
myData <- read.csv2(file, stringsAsFactors = F)
fixedData <- sapply(myData , fixData )

【讨论】:

    【解决方案2】:

    这是一种丑陋的数字格式。

    这应该让它达到你想要的样子。

    x <- factor(c("713,78-", "713,78", "577,41-", "577,41", "123,82-", "123,82"))
    
    scalar <- ifelse(grepl("-", x), -1, 1)
    x <- as.character(x)
    x <- gsub(",", ".", x)
    x <- gsub("-", "", x)
    x <- as.numeric(x) * scalar
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-18
      • 2018-11-23
      相关资源
      最近更新 更多