我正在使用运行 Windows 7 的工作机器,并且我使用的是 R 版本 3.5.1 (2018-07-02)。这是我在 stackexchange 上的第一篇文章,我不是经验丰富的程序员。
我有一个包含很多列的 .csv 文件,所以我试图只读取几个特定的列。当我尝试以数字形式读取某些列时遇到了麻烦。
我有一个解决方法(将所有列指定为字符,然后将我需要的列转换为数字),但我很好奇为什么我的第一种方法不起作用。
如果我使用代码
col_to_read<-rep("NULL",46)
col_to_read[c(11,17,23)]<-"numeric"
col_to_read[2]<-"character"
col_to_read[5]<-"factor"
data<-read.csv("outcome-of-care-measures.csv",colClasses=col_to_read)
我明白了
Error in scan(file = file, what = what, sep = sep, quote = quote, dec = dec, :
scan() expected 'a real', got '"14.3"'
我在 stackexchange 和 google 上寻找过类似的问题,但建议的解决方案对我不起作用。这可能是因为我的错误与其他错误略有不同。通常他们会报告类似
scan() expected 'a real', got '14.3'
所以这个数字没有额外的引号。
这个数据集中有很多列,而且列名很长,所以很难在记事本中发布数据的样子,但第一行是这样的
"010001","SOUTHEAST ALABAMA MEDICAL CENTER","1108 ROSS CLARK CIRCLE","","","DOTHAN","AL","36301","HOUSTON","3347938701","14.3",
这不是整行数据,我停在 14.3,这是我想指定为数字的第一列。
我尝试了许多 read.csv 和 read.table 排列,其中之一包括设置 dec="," 但我得到了同样的错误。我不住在逗号用于小数的地方。如果我没有为 colClasses 指定任何内容,我希望为数字的字段将默认被读取为因子。
sessionInfo() 的输出是
R version 3.5.1 (2018-07-02)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 7 x64 (build 7601) Service Pack 1
Matrix products: default
locale:
[1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252
[3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C
[5] LC_TIME=English_United States.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] swirl_2.4.3
loaded via a namespace (and not attached):
[1] httr_1.3.1 compiler_3.5.1 magrittr_1.5 R6_2.2.2 tools_3.5.1 RCurl_1.95-4.11
[7] yaml_2.2.0 stringi_1.1.7 stringr_1.3.1 digest_0.6.17 testthat_2.0.0 rlang_0.2.2
[13] bitops_1.0-6