r - R:基于同一数据帧中另一个因素的 NROW 对数据帧的子集进行子集化
问题描述
对于特定风角(例如 0º、5º 等),我在两个位置(参考 mast6 和 sonic_f)有 3 个方向(u、v 和 w)的风速读数,我已将所有这些导入并绑定到单个 data.frame 中。
我想以成对的形式绘制数据,但参考桅杆在前 X 秒内没有记录。我需要将声波文件修剪为等效参考桅杆数据为每个角度和每个 uv 或 w 方向显示的第一个时间戳。
例如,每个位置的开始时间如下:
> aggregate(data=df,StartTime~MeasurementLocation+Angle,min)
Location Angle StartTime
1 mast6_u 00 17602
2 mast6_v 00 17602
3 mast6_w 00 18602
4 sonic_f_u 00 2
5 sonic_f_v 00 2
6 sonic_f_w 00 2
7 mast6_u 05 13001
8 mast6_v 05 13001
9 mast6_w 05 13002
10 sonic_f_u 05 2
11 sonic_f_v 05 2
12 sonic_f_w 05 2
因此,例如,属于角度 00 的所有数据的开始时间必须是 18602。 编辑
所需的输出将是每个角度的单独文件,对于 Angle==00,sonic_f_u v 或 w 的长度与同一角度的 mast_u v 或 w 的最短数据集的长度相同。例如对于角度 00,mast6_u v 和 w 必须都从 18602 开始,sonic_f_u v 和 w 也应该如此。
解决方案
Hard to beat data.table on this...
library(data.table)
setDT(df)[ , start_time_max := max( StartTime ), by = Angle][StartTime >= start_time_max, ][, start_time_max := NULL][]
# Num Location Angle StartTime
# 1: 3 mast6_w 0 18602
# 2: 9 mast6_w 5 13002
benchmarks
microbenchmark::microbenchmark(
data.table = setDT(df)[ , start_time_max := max( StartTime ), by = Angle][StartTime >= start_time_max, ][, start_time_max := NULL][],
tidyverse = { left_join(df,
df %>%
group_by(Angle) %>%
summarise(max(StartTime)),
by = "Angle"
) %>%
filter(StartTime == `max(StartTime)`) %>%
select(-`max(StartTime)`) %>%
arrange(Angle, Location) %>%
unique()
}, times = 100
)
# Unit: microseconds
# expr min lq mean median uq max neval
# data.table 937.233 1050.057 1195.317 1196.169 1289.260 1808.488 100
# tidyverse 4694.900 4991.645 5409.146 5172.855 5341.563 24359.309 100
推荐阅读
- javascript - 如何从 DOM 元素和选择器的混合中创建 JQuery 容器
- python - Django 休息框架视图集 get_queryset() 不返回正确的查询集
- javascript - 从 localStorage 加载 var n 并循环 n 次
- css - 使父元素“调整大小”以等于最大子元素的宽度(响应式开关切换)
- html - 没有 CSS 被识别....我做错了什么?
- php - 将数组值捕获到 php 变量的问题
- bash - 在没有 root 访问权限的 CPanel 服务器上安装 wkhtmltopdf
- excel - 有没有办法使用 VBA 比较不同工作表上的两个表,看看它们是否匹配/符合标准?
- python-3.x - 从 Python 对网站进行简单查询
- python - 做一个基本的TypeError?