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