readr::read_csv错误地读取了我正在加载的文件中的某些列类型,所以我想使用cols手动设置它们。
在?read_csv中,它指出col_types参数应该是_“一个‘NULL’、一个‘cols()’规范或一个字符串。有关更多详细信息,请参阅‘vignette(”column-types“)”。“嗯,vignette("column-types")给了vignette("column-types") not found,所以我试着用?cols。它说它接受“由‘col_*()’创建的列对象或它们的缩写字符名称”。
什么是可接受的函数或缩写字符名称?我在哪里可以找到这些信息?readr 1.1.1 btw。
发布于 2018-06-02 07:25:56
有col_double、col_integer、col_character、col_date、col_factor、.etc
library(readr)
mtcars <- read_csv(readr_example("mtcars.csv"), col_types =
cols(
mpg = col_double(),
cyl = col_integer(),
disp = col_double(),
hp = col_integer(),
drat = col_double(),
vs = col_integer(),
wt = col_double(),
qsec = col_double(),
am = col_integer(),
gear = col_integer(),
carb = col_integer()
)
)
mtcars
#> # A tibble: 32 x 11
#> mpg cyl disp hp drat wt qsec vs am gear carb
#> <dbl> <int> <dbl> <int> <dbl> <dbl> <dbl> <int> <int> <int> <int>
#> 1 21 6 160 110 3.9 2.62 16.5 0 1 4 4
#> 2 21 6 160 110 3.9 2.88 17.0 0 1 4 4
#> 3 22.8 4 108 93 3.85 2.32 18.6 1 1 4 1
#> 4 21.4 6 258 110 3.08 3.22 19.4 1 0 3 1
#> 5 18.7 8 360 175 3.15 3.44 17.0 0 0 3 2
#> 6 18.1 6 225 105 2.76 3.46 20.2 1 0 3 1
#> 7 14.3 8 360 245 3.21 3.57 15.8 0 0 3 4
#> 8 24.4 4 147. 62 3.69 3.19 20 1 0 4 2
#> 9 22.8 4 141. 95 3.92 3.15 22.9 1 0 4 2
#> 10 19.2 6 168. 123 3.92 3.44 18.3 1 0 4 4
#> # ... with 22 more rows或者,您可以使用紧凑的字符串表示形式,其中每个字符表示一列:c = character、i = integer、n = number、d = double、l = logical、D = date、T = date time、t = time、? = guess或_/-跳过该列。
mtcars_select <- read_csv(readr_example("mtcars.csv"),
col_types = cols_only(mpg = 'd', cyl = 'i', hp = 'i',
qsec = 'd', gear = 'i'),
na = c("NA", "N/A", "-9999", "-999"))
mtcars_select
#> # A tibble: 32 x 5
#> mpg cyl hp qsec gear
#> <dbl> <int> <int> <dbl> <int>
#> 1 21 6 110 16.5 4
#> 2 21 6 110 17.0 4
#> 3 22.8 4 93 18.6 4
#> 4 21.4 6 110 19.4 3
#> 5 18.7 8 175 17.0 3
#> 6 18.1 6 105 20.2 3
#> 7 14.3 8 245 15.8 3
#> 8 24.4 4 62 20 4
#> 9 22.8 4 95 22.9 4
#> 10 19.2 6 123 18.3 4
#> # ... with 22 more rows甚至更短
mtcars <- read_csv(readr_example("mtcars.csv"), col_types = "di_i__d__i_")
mtcars
# A tibble: 32 x 5
mpg cyl hp qsec gear
<dbl> <int> <int> <dbl> <int>
1 21 6 110 16.5 4
2 21 6 110 17.0 4
3 22.8 4 93 18.6 4
4 21.4 6 110 19.4 3
5 18.7 8 175 17.0 3
6 18.1 6 105 20.2 3
7 14.3 8 245 15.8 3
8 24.4 4 62 20 4
9 22.8 4 95 22.9 4
10 19.2 6 123 18.3 4
# ... with 22 more rows参考:
https://cran.r-project.org/web/packages/readr/vignettes/readr.html
https://www.rdocumentation.org/packages/readr/versions/1.1.1/topics/cols
发布于 2018-06-02 07:27:59
我也认为这并没有明显的文档记录。您可以从readr阅读col_types.R的源代码,其中包含以下缩写:
"_" = ,
"-" = col_skip(),
"?" = col_guess(),
c = col_character(),
D = col_date(),
d = col_double(),
i = col_integer(),
l = col_logical(),
n = col_number(),
T = col_datetime(),
t = col_time()设置列类型的方法是传递一个命名的向量:
col_types = cols(column_1 = col_integer(), column2 = col_character())或者,如果您使用的是col_names,只需传递一个相同长度的向量。
如果覆盖默认值的原因是read_csv猜错了类型,那么您可以使用spec_csv来克服这个问题,并允许在猜测类型时使用更多的行(默认情况下,它使用1,000行)。例如
x<- spec_csv(filename,guess_max=2000)
read_csv(filename,col_types = x)`https://stackoverflow.com/questions/50651898
复制相似问题