我在 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