最近我接触到dplyr工具,作为一个新手,我非常喜欢它。因此,我正在尝试将一些基础R代码转换为dplyr代码。
在处理航空交通管制数据时,我正在努力使用lubridate和as.POSIXlt来解析嵌入在mutate_each()调用中的时间戳。我需要POSIXlt格式,因为我之后必须处理不同位置的本地时间。读取数据会得到一个字符型数据框。以下是一个简单的例子:
ICAO_ADEP <- c("DGAA","ZSPD","UAAA","RJTT","KJFK","WSSS")
MVT_TIME_UTC <- c("01-Jan-2013 04:02:24", NA,"01-Jan-2013 04:08:18", NA,"01-Jan-2013 04:17:11","01-Jan-2013 04:21:52")
flights <- data.frame(ICAO_ADEP, MVT_TIME_UTC)
我写的函数如下所示:
make_POSIXlt <- function(vec, tz="UTC"){
vec <- parse_date_time(vec, orders="dmy_hms", tz=tz)
vec <- as.POSIXlt(vec, tz=tz)
}
当使用单个列执行代码时,它可以正常工作:
flights$MVT_TIME_UTC <- make_POSIXlt(flights$MVT_TIME_UTC)
如果我运行以下的dplyr代码,该函数将失败:
flights$BLOCK_TIME_UTC <- mutate_each(flights, funs(make_POSIXlt(.)), MVT_TIME_UTC)
Error: wrong result size (9), expected 6 or 1
问题应该与as.POSIXlt调用相关联。如果将此行注释掉,则代码在mutate_each中运行,并将时间戳强制转换为POSIXct。
您有没有任何想法/帮助,究竟哪里出了问题? 显然,我的数据有几个时间戳,我想使用mutate_each(或任何其他适合的dplyr函数)进行强制转换...
POSIXlt
类型,因为 POSIXlt 是一个多级列表结构,其中每个条目都是一个命名列表。我不确定数据框出了什么问题,但它确实有问题。向 dplyr 添加警告将使该软件包在data.frame
的帮助页面上占据优势,因为该页面没有这样的警告。 - IRTFMdplyr
github 上关于POSIXlt
的问题,链接在这里和这里。 - Henrik