我想将日期列(Date、POSIXct、POSIXt)转换为数据框中的字符列。例如,我有这个数据框。
df <- data.frame(date = Sys.Date(), time = Sys.time(), val = 1)
Run Code Online (Sandbox Code Playgroud)
我可以轻松地使用这样的手动方式将日期列转换为字符列。
df$date <- as.character(df$date)
df$time <- as.character(df$time)
Run Code Online (Sandbox Code Playgroud)
有什么方法可以将它们整体转换而无需一一指定日期列吗?我如何使用lapply或sapply函数转换它们?
首先,制作一个更完整的示例,其中包含多种数据类型。然后,确定哪些属于 类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
Run Code Online (Sandbox Code Playgroud)
请注意,其他日期/时间类(例如POSIXct和 )POSIXlt都继承自类POSIXt,因此您只需测试后者。