R:用逗号读取数字,在末尾用负号读取负数

时间:2015-09-15 19:09:46

标签: r read.csv

我在阅读具有奇怪格式数字的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

列号为Numeric。

2 个答案:

答案 0 :(得分:4)

一般应该有效:

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 )

答案 1 :(得分:1)

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

这应该是你想要的。

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