首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何计算R中两个时间戳列的均值?

如何计算R中两个时间戳列的均值?
EN

Stack Overflow用户
提问于 2019-03-13 16:24:37
回答 2查看 453关注 0票数 1

我在R中有数据框架,其中两列是datetimes (POSIX类)。我需要按每一行计算平均日期时间。

下面是一些可重复的例子:

代码语言:javascript
复制
a <- c(
 "2018-10-11 15:22:17",
 "2018-10-10 16:30:37",
 "2018-10-10 16:52:46", 
 "2018-10-10 16:58:33", 
 "2018-10-10 16:32:24")

b <- c(
  "2018-10-11 15:25:12", 
  "2018-10-10 16:30:39", 
  "2018-10-10 16:55:14", 
  "2018-10-10 16:58:53", 
  "2018-10-10 16:32:27")

a <- strptime(a, format = "%Y-%m-%d %H:%M:%S")
b <- strptime(b, format = "%Y-%m-%d %H:%M:%S")

f <- data.frame(a, b)

结果应该是:

代码语言:javascript
复制
                    a                   b           time_mean
1 2018-10-11 15:22:17 2018-10-11 15:25:12 2018-10-11 15:23:44
2 2018-10-10 16:30:37 2018-10-10 16:30:39 2018-10-10 16:30:38
3 2018-10-10 16:52:46 2018-10-10 16:55:14 2018-10-10 16:54:00
4 2018-10-10 16:58:33 2018-10-10 16:58:53 2018-10-10 16:58:43
5 2018-10-10 16:32:24 2018-10-10 16:32:27 2018-10-10 16:32:25

我试过以下几点:

代码语言:javascript
复制
apply(f, 1, function(x) mean)
apply(f, 1, function(x) mean(c(x[1], x[2])))
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-13 16:41:49

不要使用apply (可以将其转换为matrix,然后去掉class属性),而是使用Map

代码语言:javascript
复制
f$time_mean <- do.call(c, Map(function(x, y) mean(c(x, y)), a, b))
f$time_mean
#[1] "2018-10-11 15:23:44 EDT" "2018-10-10 16:30:38 EDT" "2018-10-10 16:54:00 EDT" "2018-10-10 16:58:43 EDT"
#[5] "2018-10-10 16:32:25 EDT"

或者是来自data.frame f

代码语言:javascript
复制
do.call(c, Map(function(x, y) mean(c(x, y)), f$a, f$b))

另外,另一个选项是使用numeric (也有POSIXlt方法分派)转换为POSIXlt类,执行rowMeans并转换为DateTime类,如@jay.sf的文章中所示

代码语言:javascript
复制
as.POSIXlt(rowMeans(sapply(f, xtfrm)), origin = "1970-01-01")
#[1] "2018-10-11 15:23:44 EDT" "2018-10-10 16:30:38 EDT" "2018-10-10 16:54:00 EDT" "2018-10-10 16:58:43 EDT"
#[5] "2018-10-10 16:32:25 EDT"
票数 2
EN

Stack Overflow用户

发布于 2019-03-13 16:48:44

你可以用数字计算。

代码语言:javascript
复制
f$time_mean <- as.POSIXct(sapply(seq(nrow(f)), function(x) 
  mean(as.numeric(f[x, ]))), origin="1970-01-01")
f
#                     a                   b           time_mean
# 1 2018-10-11 15:22:17 2018-10-11 15:25:12 2018-10-11 15:23:44
# 2 2018-10-10 16:30:37 2018-10-10 16:30:39 2018-10-10 16:30:38
# 3 2018-10-10 16:52:46 2018-10-10 16:55:14 2018-10-10 16:54:00
# 4 2018-10-10 16:58:33 2018-10-10 16:58:53 2018-10-10 16:58:43
# 5 2018-10-10 16:32:24 2018-10-10 16:32:27 2018-10-10 16:32:25
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55146733

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档