首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在readr中使用的"col_*()“形式的可允许的列对象是什么?

在readr中使用的"col_*()“形式的可允许的列对象是什么?
EN

Stack Overflow用户
提问于 2018-06-02 06:55:29
回答 2查看 364关注 0票数 3

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。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-02 07:25:56

col_doublecol_integercol_charactercol_datecol_factor、.etc

代码语言:javascript
复制
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 = characteri = integern = numberd = doublel = logicalD = dateT = date timet = time? = guess_/-跳过该列。

代码语言:javascript
复制
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

甚至更短

代码语言:javascript
复制
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

票数 4
EN

Stack Overflow用户

发布于 2018-06-02 07:27:59

我也认为这并没有明显的文档记录。您可以从readr阅读col_types.R的源代码,其中包含以下缩写:

代码语言:javascript
复制
"_" = ,
"-" = 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()

设置列类型的方法是传递一个命名的向量:

代码语言:javascript
复制
col_types = cols(column_1 = col_integer(), column2 = col_character())

或者,如果您使用的是col_names,只需传递一个相同长度的向量。

如果覆盖默认值的原因是read_csv猜错了类型,那么您可以使用spec_csv来克服这个问题,并允许在猜测类型时使用更多的行(默认情况下,它使用1,000行)。例如

代码语言:javascript
复制
x<- spec_csv(filename,guess_max=2000)
read_csv(filename,col_types = x)`
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50651898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档