r - 将多个字符列更改为日期

标签 r tidyverse lubridate

我有多个字符列(大约 20 个),我想将它们全部更改为日期格式并使用 r 删除时间。我尝试过循环变异应用

这是一些仅使用两列的示例数据

col1 = c("2017-04-01 23:00:00", "2017-03-03 00:00:01", "2017-04-02 
00:00:01")
col2 = c("2017-04-10 08:41:49", "2017-04-10 08:39:48", "2017-04-10 
08:41:51")
df <- cbind(col1, col2)

我已经尝试过:

df <- df %>% mutate(df, funs(ymd))

df <- df %>% mutate(df, funs(mdy))

两者都给了我一个错误。我还尝试将所有列名称放入列表中并执行

for(i in namedlist) {
as_date(df[i])
glimpse(df)
}

这也不起作用。

我尝试使用 Convert multiple columns to dates with lubridate and dplyr 中的答案但这也不起作用。该帖子希望转换某些变量。我希望转换所有变量,以便 var 命令不适用。

有什么建议可以有效地做到这一点吗?谢谢。

最佳答案

如果您要应用到所有列,则可以使用 lapply 进行一次非常简短的调用。我将使用 data.table 将其传递到此处:

library( data.table )
setDT( df )

df <- df[ , lapply( .SD, as.Date ) ]

根据您的测试数据,这给出:

> df
         col1       col2
1: 2017-04-01 2017-04-10
2: 2017-03-03 2017-04-10
3: 2017-04-02 2017-04-10

注意:您的测试数据实际上会生成一个 matrix,因此您需要首先将其转换为 data.frame(或直接转换为 data.frame)。表)。

您可以仅使用基本的R做同样的事情,但我个人更喜欢上面的解决方案:

df <- as.data.frame( lapply( df, as.Date ) )

> df
        col1       col2
1 2017-04-01 2017-04-10
2 2017-03-03 2017-04-10
3 2017-04-02 2017-04-10

关于r - 将多个字符列更改为日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48501059/

相关文章:

r - 使用 data.table 查找间隔之间的差距

r - 如何评估 R 中 data.frame 中组内先前值满足的条件

r - 按照规则集扩展数据框

r - 如何使用 POSIXct 类型选择日期范围

r - 使用 sapply 时如何使用函数的参数?

python - 在shinyapps.io 上使用 python 3 in reticulate

r - 如何在R中将flextable保存为png

r - 映射列表并将变量插入到函数中

r - 我可以通过 ID 列和最近的日期值在 R 中连接 2 个数据帧吗

r - 如何从日期获得下周日结束的一周