我最近遇到了 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 函数)强制...