r - 根据分类运行进行总结
问题描述
我正在总结大量传感器数据。我需要提取 1.) 特定类别的最大运行长度和 2.) 运行中所有变量的汇总统计信息。
例如数据:
require(dplyr)
fruit <- as.factor(c('apple','apple','banana','banana','banana','guava','guava','guava','guava','apple','apple','apple','banana','guava'))
duration <- c(1,2,1,2,3,1,2,3,4,1,2,3,1,1)
set.seed(14)
temp <- round(runif(14, 80.0, 105.0))
test <- data.frame(duration, fruit, temp)
#Example Data Frame
duration fruit temp
1 apple 86
2 apple 96
1 banana 104
2 banana 94
3 banana 105
1 guava 93
2 guava 103
3 guava 91
4 guava 92
1 apple 90
2 apple 102
3 apple 84
1 banana 92
1 guava 101
我可以通过将每一行与前面的行进行比较来完成#1,看看它们是否不同。
但是,此结果还返回最后一行的 Temp 的单个条目,我希望能够计算 Temp 数据的各种摘要,例如平均值。
test %>% filter((lead(`fruit`) != `fruit`)| is.na(lead(`fruit`)) )
我想结束的框架更像是:
test %>%
filter((lead(`fruit`) != `fruit`)| is.na(lead(`fruit`)) ) %>%
select(-temp) %>%
mutate(mean_temp = c(91,101,94.8,92,92,101))
##Goal Output
duration fruit mean_temp
2 apple 91.0
3 banana 101.0
4 guava 94.8
3 apple 92.0
1 banana 92.0
1 guava 101.0
关于如何有效地做到这一点的任何想法?
解决方案
我们可以使用创建组lag
,cumsum
然后计算每个组的统计数据。
library(dplyr)
test %>%
group_by(group = cumsum(fruit != lag(fruit, default = first(fruit)))) %>%
summarise(fruit = first(fruit),
duration = n(),
mean_temp = mean(temp)) %>%
select(-group)
# fruit duration mean_temp
# <fct> <int> <dbl>
#1 apple 2 91
#2 banana 3 101
#3 guava 4 94.8
#4 apple 3 92
#5 banana 1 92
#6 guava 1 101
也可以使用data.table::rleid
替换group_by
行来创建组
group_by(group = data.table::rleid(fruit))
或使用rle
group_by(group = with(rle(as.character(fruit)), rep(seq_along(values), lengths)))
或使用data.table
library(data.table)
setDT(test)[, .(duration = .N, fruit = fruit[1L],
mean_temp = mean(temp)), by = rleid(fruit)]
推荐阅读
- sql - 添加新的计算列;Start_DateTime 加上持续时间(时间)作为 End_datetime
- java - 如何获得这种日期格式?
- spring - 如何将前端给出的临时 ID 映射到生成的后端 ID?
- typescript - 无法为 TypeScript 项目打开扩展开发主机
- vim - 为了寻找解释|的统一理论,
, 和 \| 在 Vim 中 - math - 将 3D 平面上的点转换为 2D 坐标系 wrt 相机
- unix - Ansible 更新 sshd 配置文件
- javascript - 未定义的“this.props.navigation.state.props.p”导航反应原生
- corda - 在 Corda 中,运行流程时出现“意外的任务状态”
- oracle - oracle是否存储数据的交易日期?