readr::read_csv
误读了我正在加载的文件中的某些列类型,因此我想使用cols
手动设置它们。
在?read_csv
中,它表示col_types参数应为_"'NULL'之一,'cols()'规范或字符串。有关更多详细信息,请参阅'小插图("列类型")'。好吧,vignette("column-types")
提供了vignette("column-types") not found
,所以我尝试了?cols
。它表示它接受由'col _ *()'或其缩写字符名称"创建的列对象。
可接受的功能或缩写字符名称是什么?我在哪里可以找到该信息? readr 1.1.1
btw。
答案 0 :(得分:3)
有col_double
,col_integer
,col_character
,col_date
,col_factor
,。iec
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
,{{ 1}},或? = 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
价:
https://cran.r-project.org/web/packages/readr/vignettes/readr.html
https://www.rdocumentation.org/packages/readr/versions/1.1.1/topics/cols
答案 1 :(得分:1)
这可能不是可用的col_*()
后缀的完整列表,但它很接近:
_logical
_integer
_double
_number
_character
_datetime
_date
_time
_factor
如果要手动指定列类型,可以先复制并粘贴此代码,然后调整它来修复解析问题。
df3 <- read_csv( readr_example("challenge.csv"), col_types = cols( x = col_double(), y = col_date(format = "") ) )
本文重点介绍不同类型的解析器,它们按部分列出(原子向量,日期/时间等)。对于每个parse_()
函数,都有一个等效的col_
函数:
每个parse_ ()都与col _ ()函数耦合,该函数将用于解析完整的tibble。
答案 2 :(得分:1)
我也认为这没有明显的记录。您可以从col_types.R
阅读readr
的源代码,该代码会告诉您缩写:
"_" = ,
"-" = 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)`