r - 根据标准使用 tidyverse 对数据进行排序
问题描述
我有一个由两列组成的数据框:ID 和 date_time。ID 表示谁正在被记录,而 date_time 表示何时。请参阅下面的数据框。
从这个数据框中,我想计算一个包含三列的新数据框:“测量”、“ID”和“日期”。
- “测量”。此列应说明这是给定 ID 的数字测量值。测量从 23:00:00 开始,然后一直运行到第二天的 22:59:59。然而,测量在随机时间开始,因此第一次测量的持续时间不是 24 小时。最后一次测量也不是 24 小时。
- “ID”。指示给定测量的 ID
- “日期”。此列应显示给定测量中最后一次记录的日期,格式为:yyyy.mm.dd。
每个唯一测量值都应该有一行
structure(list(date_time = c("2020.03.02 22:00:17", "2020.03.02 22:05:17",
"2020.03.02 22:10:17", "2020.03.02 22:35:17", "2020.03.02 22:40:17",
"2020.03.02 22:45:17", "2020.03.02 22:50:17", "2020.03.02 22:55:17",
"2020.03.02 23:00:17", "2020.03.02 23:05:17", "2020.03.02 23:10:17",
"2020.03.02 23:15:17", "2020.03.02 23:20:17", "2020.03.02 23:25:17",
"2020.03.02 23:30:17", "2020.03.02 23:35:17", "2020.03.02 23:40:17",
"2020.03.02 23:45:17", "2020.03.02 23:50:17", "2020.03.02 23:55:17",
"2020.03.03 00:00:17", "2020.03.03 00:55:17", "2020.03.03 01:00:17",
"2020.03.03 01:05:17", "2020.03.03 01:10:17", "2020.03.03 01:15:17",
"2020.03.03 01:20:17", "2020.03.03 01:25:17", "2020.05.09 08:39:32",
"2020.05.09 08:39:32", "2020.05.09 08:39:32", "2020.05.09 08:39:32",
"2020.05.09 08:39:32", "2020.05.09 08:39:32", "2020.05.09 08:39:32",
"2020.05.09 08:39:32", "2020.05.09 08:39:32", "2020.05.09 08:39:32",
"2020.05.09 08:39:32", "2020.05.09 08:39:32", "2020.05.09 08:39:32",
"2020.05.09 08:39:32", "2020.05.09 08:39:32", "2020.05.09 08:39:32",
"2020.05.09 08:39:32", "2020.05.09 08:39:32"), id = c(12L, 12L,
12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L,
12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L,
13L, 13L, 13L, 13L, 13L, 13L, 13L, 13L, 13L, 13L, 13L, 13L, 13L,
13L, 13L, 13L, 13L, 13L)), row.names = c(NA, 46L), class = "data.frame")
#Expected output:
output <- read.table(header=TRUE, text ="
ID Date Measurement
12 2020.03.02 1
12 2020.03.03 2
13 2020.05.09 1
")
我是 R 新手,并尝试使用 tidyverse。非常感谢所有帮助,谢谢!
解决方案
我敢肯定有更好的方法来做到这一点,但是......
library(tidyverse)
df <- data.frame(
structure(list(date_time = c("2020.03.02 22:00:17", "2020.03.02 22:05:17",
"2020.03.02 22:10:17", "2020.03.02 22:35:17", "2020.03.02 22:40:17",
"2020.03.02 22:45:17", "2020.03.02 22:50:17", "2020.03.02 22:55:17",
"2020.03.02 23:00:17", "2020.03.02 23:05:17", "2020.03.02 23:10:17",
"2020.03.02 23:15:17", "2020.03.02 23:20:17", "2020.03.02 23:25:17",
"2020.03.02 23:30:17", "2020.03.02 23:35:17", "2020.03.02 23:40:17",
"2020.03.02 23:45:17", "2020.03.02 23:50:17", "2020.03.02 23:55:17",
"2020.03.03 00:00:17", "2020.03.03 00:55:17", "2020.03.03 01:00:17",
"2020.03.03 01:05:17", "2020.03.03 01:10:17", "2020.03.03 01:15:17",
"2020.03.03 01:20:17", "2020.03.03 01:25:17", "2020.05.09 08:39:32",
"2020.05.09 08:39:32", "2020.05.09 08:39:32", "2020.05.09 08:39:32",
"2020.05.09 08:39:32", "2020.05.09 08:39:32", "2020.05.09 08:39:32",
"2020.05.09 08:39:32", "2020.05.09 08:39:32", "2020.05.09 08:39:32",
"2020.05.09 08:39:32", "2020.05.09 08:39:32", "2020.05.09 08:39:32",
"2020.05.09 08:39:32", "2020.05.09 08:39:32", "2020.05.09 08:39:32",
"2020.05.09 08:39:32", "2020.05.09 08:39:32"), id = c(12L, 12L,
12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L,
12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L,
13L, 13L, 13L, 13L, 13L, 13L, 13L, 13L, 13L, 13L, 13L, 13L, 13L,
13L, 13L, 13L, 13L, 13L)), row.names = c(NA, 46L), class = "data.frame")
)
df %>%
mutate(
date_time = anytime::anydate(date_time)
) %>%
group_by(id) %>% summarise(date = unique(date_time)) %>%
mutate(
Measurement = 1,
Measurement = cumsum(Measurement)
)
# A tibble: 3 x 3
# Groups: id [2]
id date Measurement
<int> <date> <dbl>
1 12 2020-03-02 1
2 12 2020-03-03 2
3 13 2020-05-09 1
推荐阅读
- sql - 如何从 SparkR 中的数据框创建表
- c# - Entity Framework Core - 将 Azure SQL 实例设置为在弹性池中预配(不是 T-SQL)
- django - Django 模型选择字段:如何删除空字段?Django表单从选择列表中排除一个值?
- c# - 如何在 WPF DataGrid 中以编程方式设置属性和字段值?
- testing - 如何使用赛普拉斯从控制台触发点击?
- python - subprocess.Popen 中一个奇怪的参数有问题,即 command_argsbasestring
- swiftui - ZStack - IOS 14 beta - Zstack 在键盘上飞
- c# - Xamarin Picker - 在选定索引处打开列表显示
- python - 实时操作音频缓冲区 - Python 3.7
- python - 如何使用多条曲线和因变量进行曲线拟合