r - 使用 mlply 与 mapply 的不同 pmax 输出

标签 r plyr

我仍在尝试更好地理解 mlply 的工作原理。这是我的数据集的简化版本:

days <- list(c(as.POSIXct("2010-08-29 00:00:00 EDT"), as.POSIXct("2010-08-30 00:00:00 EDT")))
day2 <- list(c(as.POSIXct("2010-07-22 00:00:00 EDT"), as.POSIXct("2010-07-23 00:00:00 EDT"), as.POSIXct("2010-07-24 00:00:00 EDT")))
days <- append(day2, days)
arrivals <- data.frame(date=as.POSIXct("2010-08-29 21:00:00 EDT"), size=72)
arrivals <- rbind(arrivals, c("2010-07-22 17:30:00 EDT",84))

使用 mapply 和 pmax 来选择天数和到达时间之间的最大值,我得到以下结果:

starting <- mapply(function(x,y){pmax(x,y)},days,arrivals$date)
starting[[1]]
"2010-08-29 21:00:00 EDT" "2010-08-29 21:00:00 EDT" "2010-08-29 21:00:00 EDT"

我确信使用 mlply 的下一个版本不是等价的,这显然是我的错误,但是,我不太确定为什么输出不同。

starts <- mlply( cbind(arrivals$date,days), function(date,days){pmax(date,days)})
as.POSIXct(starts[[1]], origin='1970-1-1')
[1] "2010-08-30 02:00:00 EDT" "2010-08-30 02:00:00 EDT" "2010-08-30 02:00:00 EDT"

理想情况下,我正在寻找如何使用 mlply 重写 mapply 语句。 提前致谢, --JT

最佳答案

比较

> starts[[1]]
[1] 1283112000 1283112000 1283112000
> as.numeric(starting[[1]])
[1] 1283112000 1283112000 1283112000
> 

POSIX 对 UTC/GMT 的引用。在您的示例中,您似乎提前了 5 小时。这是内部的输出问题,它们看起来是相同的时间。进一步评论很难。这取决于您运行的操作系统。它可能会受到您的区域设置等的影响。

还有as.POSIXct gives an unexpected timezone表明 as.POSIXct.date 可能存在问题,但我不确定这是否仍然是一个问题。

关于r - 使用 mlply 与 mapply 的不同 pmax 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11528324/

相关文章:

r - 将双字字符串中两个单词的第一个字母大写

r - 提前n天计算滚动平均值

r - 使用 doParallel 在 R 中并行化 keras 模型

前导行中的引用数据

r - 使用 ddply 分配组 ID

r - 在给定列上聚合数据框并显示另一列

r - 合并一些重复的行并对其中一列求和

r - ggplot2:将条形图中的条形从最高到最低重新排序

r - 如何优化 R 中词干提取和拼写检查的性能?

r - 如何在函数中结合 lapply 和 dplyr