首页 > 解决方案 > 使用 vroom 在 R 中读取日期列和所有其他列作为双精度

问题描述

我有 csv 文件,其中包含超过 10000 个变量。我想使用 vroom 来读取它们,并希望将第 1 列标识为日期,将第 2 列标识为字符,第 3 列和第 4 列标识为整数,并将所有其余列标识为双精度。我该怎么做呢?

我的代码看起来像这样,但失败了。

data81 <- vroom(fname_1981_2010, col_types = c(Date = col_date(), MonthDay = col_character(), doy = col_integer(), (.) = col_double()))

告诉 vroom 在其余列中读取为双精度(替换我的代码中的 (.) 的语法是什么?谢谢。

标签: rreadrvroom

解决方案


可以通过以下.default参数来实现cols()

library(vroom)

set.seed(42)

d <- data.frame(
  date = sample(seq(as.Date('1999/01/01'), as.Date('2000/01/01'), by="day"), 12),
  MonthDay = sample(LETTERS[1:7], 12, replace = TRUE),
  doy = 1:12,
  col4 = runif(12),
  col5 = runif(12),
  col6 = runif(12)
)

fname_1981_2010 <- "fname_1981_2010.csv"

write.csv(d, fname_1981_2010, row.names = FALSE)

vroom(fname_1981_2010, col_types = cols(date = col_date(), MonthDay = col_character(), 
      doy = col_integer(), .default = col_double()))
#> # A tibble: 12 x 6
#>    date       MonthDay   doy    col4   col5   col6
#>    <date>     <chr>    <int>   <dbl>  <dbl>  <dbl>
#>  1 1999-02-18 D            1 0.514   0.208  0.619 
#>  2 1999-11-17 A            2 0.390   0.907  0.333 
#>  3 1999-06-02 E            3 0.906   0.612  0.347 
#>  4 1999-03-15 F            4 0.447   0.380  0.398 
#>  5 1999-08-16 D            5 0.836   0.436  0.785 
#>  6 1999-05-26 B            6 0.738   0.0374 0.0389
#>  7 1999-05-02 B            7 0.811   0.974  0.749 
#>  8 2000-01-01 G            8 0.388   0.432  0.677 
#>  9 1999-05-08 C            9 0.685   0.958  0.171 
#> 10 1999-10-30 A           10 0.00395 0.888  0.261 
#> 11 1999-01-24 A           11 0.833   0.640  0.514 
#> 12 1999-11-23 C           12 0.00733 0.971  0.676

推荐阅读