我有一个大型数据库CSV-FILE,其中包含多个日期字段(>30) 所有日期在CSV文件中都显示为yyyy-mm-dd(即2023-09-13). 当使用Read.csv2导入时,所有日期都被格式化为字符串(Chr),我可以手动转换每一列,但由于日期太多,我希望找到一种更流畅的方法来修复它.

有没有什么聪明的方法可以让R首先正确地将这些日期作为日期格式导入?

db <- read.csv2("~/Dropbox/data_in.csv", sep=";")

推荐答案

您可以使用across并从dplyr包中 Select 辅助对象来更改多个变量:

library(dplyr)
#> 
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#> 
#>     filter, lag
#> The following objects are masked from 'package:base':
#> 
#>     intersect, setdiff, setequal, union
dat <- data.frame(
   id = 1:100,
   date1 = rep("2023-09-13", 100),
   date2 = rep("2023-09-13", 100),
   date3 = rep("2023-09-13", 100),
   date4 = rep("2023-09-13", 100),
   date5 = rep("2023-09-13", 100)
)

str(dat)
#> 'data.frame':    100 obs. of  6 variables:
#>  $ id   : int  1 2 3 4 5 6 7 8 9 10 ...
#>  $ date1: chr  "2023-09-13" "2023-09-13" "2023-09-13" "2023-09-13" ...
#>  $ date2: chr  "2023-09-13" "2023-09-13" "2023-09-13" "2023-09-13" ...
#>  $ date3: chr  "2023-09-13" "2023-09-13" "2023-09-13" "2023-09-13" ...
#>  $ date4: chr  "2023-09-13" "2023-09-13" "2023-09-13" "2023-09-13" ...
#>  $ date5: chr  "2023-09-13" "2023-09-13" "2023-09-13" "2023-09-13" ...

dat |> 
   mutate(across(starts_with("date"), as.Date)) |> 
   str()
#> 'data.frame':    100 obs. of  6 variables:
#>  $ id   : int  1 2 3 4 5 6 7 8 9 10 ...
#>  $ date1: Date, format: "2023-09-13" "2023-09-13" ...
#>  $ date2: Date, format: "2023-09-13" "2023-09-13" ...
#>  $ date3: Date, format: "2023-09-13" "2023-09-13" ...
#>  $ date4: Date, format: "2023-09-13" "2023-09-13" ...
#>  $ date5: Date, format: "2023-09-13" "2023-09-13" ...

dat |> 
   mutate(across(2:6, as.Date)) |> 
   str()
#> 'data.frame':    100 obs. of  6 variables:
#>  $ id   : int  1 2 3 4 5 6 7 8 9 10 ...
#>  $ date1: Date, format: "2023-09-13" "2023-09-13" ...
#>  $ date2: Date, format: "2023-09-13" "2023-09-13" ...
#>  $ date3: Date, format: "2023-09-13" "2023-09-13" ...
#>  $ date4: Date, format: "2023-09-13" "2023-09-13" ...
#>  $ date5: Date, format: "2023-09-13" "2023-09-13" ...

创建于2023-09-13年第reprex v2.0.2

还有其他几个helper函数,请参见``dplyr::selt`.

R相关问答推荐

收件箱摘要表布局在第一列上显示子类别

如何将图案添加到ggplot中的一个类别

基于R中的GPS点用方向箭头替换点

使用rlang s arg_match判断函数输入列表

是否可以 Select 安装不带文档的R包以更有效地存储?

从嵌套列表中智能提取线性模型系数

R:更新后无法运行控制台

编辑文件后编辑RhandsonTable

使用gggrassure减少地块之间的空间

抖动点与嵌套类别变量箱形图的位置不对齐

如何根据组大小应用条件过滤?

如何将dygraph调用到R Markdown作为一个shiny 的react 对象的参数?

将非重复序列高效转换为长格式

我不能在docker中加载sf

在R中为马赛克图中的每个字段着色

找出二叉树中每个 node 在R中的深度?

R-按最接近午夜的时间进行筛选

如何将一列中的值拆分到R中各自的列中

仅当后续值与特定值匹配时,才在列中回填Nas

在使用SliderInput In Shiny(R)设置输入数据的子集时,保留一些情节痕迹