如何将此 R CSV 数据声明为数值?

如何将此 R CSV 数据声明为数值?

我在 Vim csv.vim 插件中的 CSV 文件中的字段周围添加了空格。现在,我在将列类声明为数字(num等)时遇到困难。负值也会导致以下列出现问题。数据可以有空字段。数据data.csv

Test, test2, test3
    , 1    , 1
10.8, -1   , 1
1.1 , 2    , 2

代码

library('methods')
DF <- read.csv("/home/masi/Data/data.csv", header = T, sep = ",", colClasses=c('num','num'))

DF

输出

Error in methods::as(data[[i]], colClasses[i]) : 
  no method or default for coercing “character” to “num”
Calls: read.csv -> read.table -> <Anonymous>
Execution halted
  • 执行 时,转换为数值失败colClasses=c('num','num')
  • NA由于第二列中有一个减号 ( -1),因此第三列中的输出被视为是。

回复:3.3.3

答案1

AFAIKnum无效原子向量类R

可能的值为 NA(使用 type.convert 时的默认值)、“NULL”(跳过列时)、原子向量类之一(逻辑、整数、数字、复数、字符、原始),或“factor”、“Date”或“POSIXct”。否则,需要有一个 as 方法(来自包方法)来从“character”转换为指定的形式类。

如果您将其替换为以下代码,您的代码应该可以工作numeric

> DF <- read.csv("data.csv", header = T, sep = ",", colClasses=c('num','num'))Error in methods::as(data[[i]], colClasses[i]) : 
  no method or default for coercing “character” to “num”

然而

> DF <- read.csv("data.csv", header = T, sep = ",", colClasses=c('numeric','numeric'))
> 
> DF
  Test test2 test3
1   NA     1     1
2 10.8    -1     1
3  1.1     2     2
> 

答案2

尝试读者trim_ws=TRUE带有参数的包read_delim()

R> readr::read_delim("data.csv", delim=",", col_types="dii", trim_ws=TRUE)
# A tibble: 3 × 3
   Test test2 test3
  <dbl> <int> <int>
1    NA     1     1
2  10.8    -1     1
3   1.1     2     2

相关内容