我想将日期列(Date,POSIXct,POSIXt)转换为数据框中的字符列。例如,我有这个数据框。
df <- data.frame(date = Sys.Date(), time = Sys.time(), val = 1)
我可以轻松地使用这样的手动方式将日期列转换为字符列。
df$date <- as.character(df$date)
df$time <- as.character(df$time)
有没有什么方法可以在不指定日期列的情况下逐个转换它们?如何使用lapply
或sapply
函数转换它们?
答案 0 :(得分:2)
首先,使用各种数据类型制作更完整的示例。然后,确定哪些属于班级Date
或POSIXt
。最后,修改一下感兴趣的内容。
df <- data.frame(date = Sys.Date(), time = Sys.time(), x = 1, A = "Test")
inx <- sapply(df, function(x) inherits(x, "Date") || inherits(x, "POSIXt"))
df[inx] <- lapply(df[inx], as.character)
str(df)
#'data.frame': 1 obs. of 4 variables:
# $ date: chr "2017-11-05"
# $ time: chr "2017-11-05 08:30:19"
# $ x : num 1
# $ A : Factor w/ 1 level "Test": 1
请注意,POSIXct
和POSIXlt
等其他日期/时间类都从类POSIXt
继承,因此您只需测试后者。