我想编写一个函数,该函数将接受具有类字符的列向量,将它们转换为日期,并输出数据帧。当我运行它时,它会输出数据帧列表,但不会发生转换。我可以重写下面的内容来实现这一目标吗?上下文是我可能有很多想要转换的字符列,并且拥有一个函数似乎是实现此目的的最佳方法。
library(tidyverse)
date1<-c("2021-01-05","2021-01-06","2021-01-07","2021-01-08","2021-01-09")
date2<-c("2021-02-05","2021-02-06","2021-02-07","2021-02-08","2021-02-09")
df<-data.frame(date1,date2,stringsAsFactors = FALSE)
#the vector of columns to convert to date format
datecols<-c("date1","date2")
datefunc<-function(a){
df2<-df%>%
mutate(a=as.Date(a,"%Y-%m-%d" ))
return(df2)}
df<-lapply(datecols,datefunc)
最佳答案
如果日期具有模式'Y-%m-%d'
,则无需指定格式。您可以编写一个简单的函数,将单个列更改为日期,并使用 lapply
将其应用于 datecols
。
datefunc<-function(a) as.Date(a)
datecols<-c("date1","date2")
df[datecols] <- lapply(df[datecols], datefunc)
df
# date1 date2
#1 2021-01-05 2021-02-05
#2 2021-01-06 2021-02-06
#3 2021-01-07 2021-02-07
#4 2021-01-08 2021-02-08
#5 2021-01-09 2021-02-09
str(df)
#'data.frame': 5 obs. of 2 variables:
# $ date1: Date, format: "2021-01-05" "2021-01-06" "2021-01-07" ...
# $ date2: Date, format: "2021-02-05" "2021-02-06" "2021-02-07" ...
关于r - 将字符转换为日期的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67195393/