dplyr 相关问题

将此标记用于与dplyr包中的函数相关的问题,例如group_by,summarize,filter和select。

计算已知频率和缺失数据的数据的时间戳

我有如下数据,其中“S”类型的数据包含时间戳,我需要将时间戳分配给“D”行。 类型时间戳计数 我的数据如下,其中“S”类型的数据包含时间戳,我需要将时间戳分配给“D”行。 type timestamp count <chr> <dttm> <int> 1 $ NA NA 2 D NA 229 3 M NA NA 4 D NA 230 5 D NA 231 6 D NA 232 7 D NA 233 8 D NA 234 9 D NA 235 10 D NA 236 11 D NA 237 12 D NA 238 13 D NA 239 14 S 2024-01-24 16:11:11.000 NA 15 D NA 241 16 D NA 242 17 D NA 243 18 D NA 126 19 D NA 127 20 S 2024-01-24 16:13:29.000 NA 21 D NA 128 “Count”是一个 1 字节迭代器,从 0 到 255 并重复。缺失计数表示缺失数据行。数据线以 16Hz 发送,因此每次计数迭代代表 1/16 秒。我试图使用 D 行的计数来分配正确的时间戳,以获得最近的 S 行时间戳,并通过当前 D 行和紧随 S 行的 D 行之间的计数差异来计算时间戳。 通常,S 线是每秒一次,但我选择这个子集是为了显示数据的一些问题,主要是第 17 行 2:18 的差距。 我找到了一种可行的方法,但速度非常慢(每行 4 毫秒,对于跨越多天的文件,每天需要处理约 100 万行数据)。真实数据位于具有多种格式(ick)的行的文件中,并且本示例中的时间和计数是从中解析出来的。这听起来像是代码出现的问题,但遗憾的是,这个系统是真实的。 如果您想查看我的缓慢解决方案或查看更完整的数据,可以在存储库中的此文件中:https://github.com/blongworth/mlabtools/blob/main/R/time_alignment.R上面的数据经过简化,因此 repo 中的方法在不修改的情况下不适用于 reprex 数据。有一些测试,但尚未确定此 Reprex 的结果应如何。 关于如何有效地做到这一点有什么想法吗?我最终可能不得不去 data.tables,但只要我开始使用更有效的逻辑,我想我就能到达那里。 这是上面测试 df 的 dput 输出: structure(list(type = c("$", "D", "M", "D", "D", "D", "D", "D", "D", "D", "D", "D", "D", "S", "D", "D", "D", "D", "D", "S", "D" ), timestamp = structure(c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1706130671, NA, NA, NA, NA, NA, 1706130809, NA ), tzone = "America/New_York", class = c("POSIXct", "POSIXt")), count = c(NA, 229L, NA, 230L, 231L, 232L, 233L, 234L, 235L, 236L, 237L, 238L, 239L, NA, 241L, 242L, 243L, 126L, 127L, NA, 128L)), row.names = c(NA, -21L), class = c("tbl_df", "tbl", "data.frame")) 这是具有预期输出的示例数据: type timestamp count <chr> <dttm> <int> 1 $ NA NA 2 D 2024-01-24 16:11:10.250 229 3 M NA NA 4 D 2024-01-24 16:11:10.312 230 5 D 2024-01-24 16:11:10.375 231 6 D 2024-01-24 16:11:10.437 232 7 D 2024-01-24 16:11:10.500 233 8 D 2024-01-24 16:11:10.562 234 9 D 2024-01-24 16:11:10.625 235 10 D 2024-01-24 16:11:10.687 236 11 D 2024-01-24 16:11:10.750 237 12 D 2024-01-24 16:11:10.812 238 13 D 2024-01-24 16:11:10.875 239 14 S 2024-01-24 16:11:11.000 NA 15 D 2024-01-24 16:11:11.000 241 16 D 2024-01-24 16:11:11.062 242 17 D 2024-01-24 16:11:11.125 243 18 D 2024-01-24 16:13:28.875 126 19 D 2024-01-24 16:13:28.937 127 20 S 2024-01-24 16:13:29.000 NA 21 D 2024-01-24 16:13:29.000 128 这是一个经过一些时间戳体操的镜头。 library(dplyr) library(tidyr) # fill df |> mutate(count2 = count, nexttime = timestamp, prevtime = timestamp) |> tidyr::fill(count2, .direction = "updown") |> mutate( count2 = count2 + 256*cumsum(c(FALSE, diff(count2) < 0)), nextind = if_else(is.na(timestamp), count2[NA], count2), prevind = nextind ) |> tidyr::fill(prevtime, prevind, .direction = "down") |> tidyr::fill(nexttime, nextind, .direction = "up") |> mutate( newtimestamp = case_when( !is.na(timestamp) ~ timestamp, is.na(prevtime) | abs(count2 - nextind) < abs(count2 - prevind) ~ nexttime + (count2 - nextind)/16, TRUE ~ prevtime + (count2 - prevind)/16 ) ) |> select(names(df), newtimestamp) # # A tibble: 21 × 4 # type timestamp count newtimestamp # <chr> <dttm> <int> <dttm> # 1 $ NA NA 2024-01-24 16:11:10.250 # 2 D NA 229 2024-01-24 16:11:10.250 # 3 M NA NA 2024-01-24 16:11:10.312 # 4 D NA 230 2024-01-24 16:11:10.312 # 5 D NA 231 2024-01-24 16:11:10.375 # 6 D NA 232 2024-01-24 16:11:10.437 # 7 D NA 233 2024-01-24 16:11:10.500 # 8 D NA 234 2024-01-24 16:11:10.562 # 9 D NA 235 2024-01-24 16:11:10.625 # 10 D NA 236 2024-01-24 16:11:10.687 # 11 D NA 237 2024-01-24 16:11:10.750 # 12 D NA 238 2024-01-24 16:11:10.812 # 13 D NA 239 2024-01-24 16:11:10.875 # 14 S 2024-01-24 16:11:11.000 NA 2024-01-24 16:11:11.000 # 15 D NA 241 2024-01-24 16:11:11.000 # 16 D NA 242 2024-01-24 16:11:11.062 # 17 D NA 243 2024-01-24 16:11:11.125 # 18 D NA 126 2024-01-24 16:13:28.875 # 19 D NA 127 2024-01-24 16:13:28.937 # 20 S 2024-01-24 16:13:29.000 NA 2024-01-24 16:13:29.000 # 21 D NA 128 2024-01-24 16:13:29.000 备注: count2 只是 count 完全插值为 NAs nexttime/prevtime的用途是向前结转和向后结转timestamp,直到有另一个非NA时间戳,我在case_when中选择使用哪个; nextind/prevind 用于从 count2 中减去,这样我就可以计算出 1/16 秒。 case_when确实是大多数逻辑工作的地方,确定是否应使用原始timestamp,或(count2-nextind)/16(或prevind)从nexttime(prevtime)开始的1/16秒。

回答 1 投票 0

如何在 for 循环中对压缩在一起的值(按行)进行子集化,并隔离未压缩在一起的值

我有一个有序数据框,其中一列中有一个 calcategori 变量(特别是鸟类家族)。现在,因为它们以特定方式排序,每个物种占一行,所以...

回答 1 投票 0

在 dplyr 中使用 mutate 和 slice_max

我有以下数据框: df=data.frame(缺陷= c("缺陷1","缺陷2","缺陷3","缺陷4","缺陷5","缺陷6&qu...

回答 1 投票 0

当组是另一列时,如何检查来自不同列的两个字符串是否在同一组中?

所以我有一个包含三列的数据框:物种(该行中物种的名称); syonym(同义词物种名称,出现在数据 f...

回答 1 投票 0

计算 dplyr 中分组数据的加权中位数的 95% 置信区间

我有一个包含多个组的数据集,我想使用 dplyr 计算每个组的中值。数据经过加权,在计算me时需要考虑权重...

回答 1 投票 0

R Shiny 应用程序中 openxlsx 的 Excel 报告生成问题

我正在开发一个 Shiny 应用程序,用于处理财务数据并生成格式化的 Excel 报告。数据处理部分作为独立脚本完美运行,但是当集成到 Shiny 中时,

回答 1 投票 0

向每天的天气数据添加行,将相应的日期放在顶部

我在 R 中以 15 分钟的间隔记录天气数据,我需要对数据进行格式化,以便每天的数据后面跟着两个空白行,并在顶部写上相应的日期。这里'...

回答 1 投票 0

%/% 和 %% 是什么意思?

我最近看到这样的代码: 图书馆(dplyr) mtcars %.% 变异(carb_10 = carb %/% 10) 和这个.... mtcars %.% 变异(carb_10 = carb %% 10) 谁能解释一下上面的 %/% 和 %% 做什么...

回答 4 投票 0

加速或替代 group by 和 dplyr 中的滞后

我注意到这个操作对于看似简单的计算来说非常耗时。它可能解释了完成当前 R 脚本的所有时间中超过 60% 的时间。 实际数据包含...

回答 2 投票 0

使用滞后差异计算时 dplyr 崩溃

我有一个包含 400 万行的数据框和一个分组变量的 140 万个不同值。示例 DF 如下所示: > df 日期编号 1 2015-06-25 4333864 2 2015-06-25 3867895 3...

回答 1 投票 0

警告消息:包‘dplyr’是在 R 版本 4.2.1 下构建的

我该如何解决这个问题? 警告信息: 包“dplyr”是在 R 版本 4.2.1 下构建的

回答 3 投票 0

将具有年龄的个体计数转换为汇总统计数据

我有一个数据框,其中包含特定年份访问应用程序的客户数量的年龄数据。第一列是以年份 c(0, 1, 2...) 为单位的年龄值,接下来的列是各个年份。 ...

回答 1 投票 0

如何对R中的因子进行求和?

我有这样的数据: df <- data.frame(id = c("001", "002", "003", "004"), banana = c("banana", NA, NA, NA), ap...

回答 1 投票 0

使用 dplyr 在不同变量上创建具有多个条件的变量

我正在尝试创建一个变量,让我能够区分 my_code 中 == 2020 年利率为负值和正值的项目。因此,在 2020 年,利率变为负值,我的新变量...

回答 1 投票 0

在没有足够的非 NA 值的情况下对不同组的值进行插值

我有一个数据框,包括对距离(DIST.y 列)和高度(Z)的所有观察以及通过移动平均值(ma_Z)校正的高度,包含在 LimAm 列和

回答 2 投票 0

连接两个非常大的箭头数据集而不增加内存使用的策略

我在 parquet 文件中有两个非常大的数据集,我正在使用 R arrow::open(dataset) 读取它们。一个文件包含超过 2000 万行,另一个文件包含 1500 万行。 我需要加入两个数据集并保存一个新的

回答 1 投票 0

在没有足够的非 NA 值的情况下对不同组的值进行插值

我有一个数据框,包括对距离(DIST.y 列)和高度(Z)的所有观察以及通过移动平均值(ma_Z)校正的高度,包含在 LimAm 列和

回答 1 投票 0

R Studio 在使用 2-3 小时后停止响应

R Studio中的数据清理主要使用tidyr函数,使用2-3小时后就会冻结。恢复功能的唯一方法是关闭并重新启动。我尝试在控制台中停止运行但是...

回答 1 投票 0

加入 1.4 亿条记录的 CRM 时出现内存不足错误 - 使用 DuckDB 和 R

我没有找到问题的确切解决方案,必须从不同来源收集信息才能找到可行的解决方案。我在这里记录(通过回答)以供参考。 问题站...

回答 1 投票 0

通过插值从另一个表中插入一些匹配值来填充表

我有一个很长的表,其中包含 R 中的数据,其中包含一些关键列和一个具有相同关键列和一些额外变量的查找表。我想从查找表中选择一个基于 s 的子集...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.