【发布时间】:2023-04-10 21:14:02
【问题描述】:
很多人似乎有这个问题,但我无法找到令人满意的答案。如果你放纵我,我想确保了解发生了什么
我在数据框中有各种格式的日期(也是一个常见问题),所以我构建了一个小函数来为我处理它:
dateHandler <- function(inputString){
if(grepl("-",inputString)==T){
lubridate::dmy(inputString, tz="GMT")
}else{
as.POSIXct(as.numeric(inputString)*60*60*24, origin="1899-12-30", tz="GMT")
}
}
在一个元素上使用它时效果很好:
myExample <-c("18-Mar-11","42433")
> dateHandler(myExample[1])
[1] "2011-03-18 GMT"
> dateHandler(myExample[2])
[1] "2016-03-04 GMT"
但是在整列上使用它时它不起作用:
myDf <- as.data.frame(myExample)
> myDf <- myDf %>%
+ dplyr::mutate(dateClean=dateHandler(myExample))
Warning messages:
1: In if (grepl("-", inputString) == T) { :
the condition has length > 1 and only the first element will be used
2: 1 failed to parse.
从论坛上的阅读来看,我目前的理解是,R 将包含 myDf$myExample 的所有元素的向量传递给函数,该函数不是为处理长度 >1 的向量而构建的。如果这是正确的,下一步就是了解从那里做什么。许多人建议使用 ifelse 而不是 if 但我不明白这对我有什么帮助。我还读到 ifelse 返回与其输入格式相同的内容,在这种情况下这对我不起作用。
提前感谢您第 10000 次回答这个问题。
尼古拉斯
【问题讨论】: