我有多个字符列(大约20个),我想更改所有日期格式并使用r删除时间。我试过了loops
,mutate
和apply
。
以下是仅使用两列的一些示例数据
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
命令不适用。
有效建议吗?谢谢。
答案 0 :(得分:1)
如果您申请的是所有列,则可以使用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.table
)。
您可以使用基础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
答案 1 :(得分:0)
编辑:这次使用as.Date
函数的正确通配符。我还添加了一个可重现的示例:
library(dplyr)
df <- data.frame(date_1 = c("2019-01-01", "2019-01-02", "2019-01-03"),
date_2 = c("2019-01-04", "2019-01-05", "2019-01-06"),
value = c(1,2,3),
stringsAsFactors = F)
str(df)
date_cols <- c("date_1", "date_2")
df_2 <- df %>%
mutate_at(vars(date_cols), funs(as.Date(., "%Y-%m-%d")))
str(df_2)