r - R中具有数据框的每一行的最小值和最大值
问题描述
我需要计算几个参加过在线测试的人的处理时间。因此,对于每个人来说,都有许多时间戳(每个任务一个时间戳)。处理的持续时间是根据最小日期值和最大日期值之间的时间差来计算的。以下示例有效(student_1),但仅在没有缺少值时才有效(student_2 和 student_3)。有什么想法吗?
library(anytime)
number <- c(1, 2, 3)
uniquename <- c("student_1", "student_2", "student_3")
timestamp_1 <- c(anytime("2020-02-25T12:42:56.476Z"),NA,anytime("2020-02-25T10:05:22.388Z"))
timestamp_2 <- c(anytime("2020-02-25T12:51:22.388Z"),anytime("2020-02-25T12:51:22.388Z"),NA)
timestamp_3 <- c(anytime("2020-02-25T13:00:45.042Z"),anytime("2020-02-25T13:00:45.042Z"),NA)
timestamp_4 <- c(anytime("2020-02-25T13:31:48.073Z"),anytime("2020-02-25T13:31:48.073Z"),NA)
timestamp_5 <- c(anytime("2020-02-25T14:22:57.103Z"),anytime("2020-02-25T15:00:00Z"),anytime("2020-02-25T14:05:00Z"))
df3 <- data.frame(number,
uniquename,
timestamp_1,
timestamp_2,
timestamp_3,
timestamp_4,
timestamp_5)
df3$date_min <- apply(df3[3:7], 1, FUN=min)
df3$date_max <- apply(df3[3:7], 1, FUN=max)
df3$date_min <- anytime(df3$date_min)
df3$date_max <- anytime(df3$date_max)
df3$diff <- difftime(df3$date_min, df3$date_max, units = "mins")
df3$diff <- round(df3$diff,0)
df3$diff <- as.numeric(df3$diff)*(-1)
View(df3)
解决方案
据我所知,您可以使用当前方法添加na.rm
参数:min()
max()
df3$date_min <- apply(df3[3:7], 1, min, na.rm = TRUE)
df3$date_max <- apply(df3[3:7], 1, max, na.rm = TRUE)
df3[c("number", "uniquename", "date_min", "date_max")]
number uniquename date_min date_max
1 1 student_1 2020-02-25 12:42:56 2020-02-25 14:22:57
2 2 student_2 2020-02-25 12:51:22 2020-02-25 15:00:00
3 3 student_3 2020-02-25 10:05:22 2020-02-25 14:05:00
推荐阅读
- c - sscanf multi string scan
- java - 如何填写某些域的电子邮件 Edditext Autofill 下拉列表
- vue.js - 尝试使用 nuxt 加载 mp3 文件,但得到“您可能需要适当的加载程序来处理此文件类型。”
- git - 在不提交子模块的情况下提交对父存储库的更改
- apache - Forward HTTPS Proxy Apache not working and no logs
- javascript - 您要等待异步函数中的返回值吗?
- java - 如何将 WebElement 存储在 json 或属性中以便我可以轻松更改它
- reactjs - react-router-config - 一个组件的多个路径
- python - 如何通过在 Python 中调用函数来查找对象列表中的最大值
- mongodb - Google colab 本地环境 - 连接到本地运行的 mongodb 时出错