您好,我正在尝试编写一个接受数据帧的函数,并将所有 POSIXct 或 POSIXlt 类型转换为 R 中的日期类型。我已经创建了该函数的一部分,但我一直在迭代每个索引处的元素。
#Basic Data Frame
patientID <- c(1, 2, 3, 4)
AdmDate <- as.POSIXct(c('2010-10-11','2008-3-25','2016-4-23','2011-6-12'))
diabetes <- c("Type1", "Type2", "Type1", "Type2")
status <- c("Poor", "Improved", "Excellent", "Poor")
patientdata <- data.frame(patientID, AdmDate, diabetes, status)
convertallPOSIXct <- function(data){
if(getdata[[is.POSIXt()=='TRUE']])
getdata[[]] <- class(as.Date())
}
getdata <- function(x) {
chr_test <- x %>%
map_chr(~ paste(class(.), collapse = "/"))
}
Run Code Online (Sandbox Code Playgroud)
获取数据函数似乎可以工作,但我不确定如何从 getdata 中获取每个元素并将其转换为 R 中的 Date 类。谢谢!
这是一种选择lapply:
df <- patientdata
df[] <- lapply(df, function(x) {
if (inherits(x, "POSIXt")) as.Date(x) else x
})
str(df)
# 'data.frame': 4 obs. of 4 variables:
# $ patientID: num 1 2 3 4
# $ AdmDate : Date, format: "2010-10-11" "2008-03-25" ...
# $ diabetes : chr "Type1" "Type2" "Type1" "Type2"
# $ status : chr "Poor" "Improved" "Excellent" "Poor"
Run Code Online (Sandbox Code Playgroud)
这[]是保留data.frame结构所必需的,否则您最终会得到一个普通的列表。首选使用inherits代替,class(object) == "some_class"因为如果对象有多个类(对象有多个POSIXt类),您仍然会得到一个逻辑结果:
class(patientdata[,2]) == "POSIXt"
#[1] FALSE TRUE
inherits(patientdata[,2], "POSIXt")
#[1] TRUE
Run Code Online (Sandbox Code Playgroud)