data.table 相关问题

R data.table包是为快速内存数据分析而构建的data.frame的扩展。使用带有Shiny(DT)的DataTables包的dt标签。

如何在忽略 NA 的情况下检查重复项(NA 值被视为匹配)

我想知道如何最好地检查重复项,但以忽略 NA 值的方式 - 即,如果将某个值与 NA 进行比较,则将其视为匹配。 例如,如果我有这样的数据集 dt &...

回答 1 投票 0

用 NA 填充空数据框单元格

我正在使用 rbindlist 函数将嵌套列表转换为数据帧,并且我得到了我想要的 df 。但现在我在 df 上有这些空单元格,我想用 Na 的 I 来填充它们

回答 1 投票 0

data.table::shift type="lag" 允许扩展数据

我正在使用 data.table::shift 来滞后我的时间序列。我现在想要的是扩展日期以考虑超出时间序列最大日期的转变。 例如,如果我每月都有时间...

回答 1 投票 0

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

我有如下数据,其中“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

将数据从列转换为按组累积计数的单独虚拟变量

如下面的示例所示,我有一个数据表(我们称之为“当前”),其中包含 3 个不同人的多行,每行都有一个日期和一个分类事件。我们可以假设我已经...

回答 2 投票 0

重写时间间隔模糊连接以减少内存占用

这个问题在这篇文章中扩展:Pairing Time series Data with Batch Data in R 给了我一个很好的解决方案,适用于我提供的 dputs,但问题是我的数据集相当

回答 1 投票 0

R 函数,用于将数据帧中的行与另一个数据帧中的模式进行匹配并添加分组变量

我正在尝试创建一个函数,对于给定数据帧中的每一行,将带有 %like% 的模式与该行中列的内容进行匹配,然后将特定类别名称粘贴到...

回答 1 投票 0

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

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

回答 1 投票 0

R data.table join 相当于 pandas merge.asof

基本上我正在尝试使用 data.table 连接重现 pandas [merge_asof][1] 的行为。 左 <- data.table(a = c(1, 5, 10), left_val = c("a", "b", "c")) ...

回答 1 投票 0

如何将省略号传递到data.table?

我正在寻找构建一个函数,该函数可以在任意数量的列上左连接两个数据表。但是,当将省略号传递到 on = .() 条件时,我遇到了问题。 使用

回答 1 投票 0

data.table 添加列总和 by

开始<- data.table(team=c('a', 'a', 'b', 'b', 'b', 'c', 'c'), pts=c(5, 8, 10, 5, 5, 9, 10)) end <- data.table(team=c('a', 'a', 'b', 'b', 'b', 'c', 'c'), ...

回答 1 投票 0

在不使用 max() 的情况下按组查找 data.table 中的最后一个元素

我试图以一种省时的方式按组查找 data.table 中的最后一个元素。我有一个有效的解决方案: 库(数据.表) 数据<- data.table(id = c(rep("a", 2), rep("b&

回答 3 投票 0

按最接近的日期连接两个数据框,而无需在 R 中遍历

我有两个不同长度的数据帧。两个数据框都包含日期。我想内部加入最接近的日期列而不跳过。例如,如果“2019-01-05”是日期并且...

回答 3 投票 0

使用 data.table 从变量文件名中提取扩展名

我有一个 data.table,在字符串列中存储异构文件名。 我想从该列中提取扩展名,始终采用最后一个点出现后的字符。有时

回答 1 投票 0

有没有办法在data.table语法中自动格式化R代码?

以data.table格式编写代码时如下所示 有没有可能的方法来确保当我使用 RStudio 代码重新格式化程序 cmd + shift + A 时,代码的格式如上,inste...

回答 1 投票 0

R 数据表:如何使用列名向量按行有效地将数据传递给函数?

我有一些 data.tables,其中包含多年来多次检查的患者数据,以及一列,其中包含某些事件发生的年份(假设是心脏病发作)。这是一个玩具示例: d...

回答 1 投票 0

从 data.table 列表中提取特定的组值并作为 R 中的向量返回

我有一些数据的列表,它看起来像: 库(数据.表) dt1 <- data.table(age_group = c("young", "old"), ratio = runif(2)) dt2 <- data.table(age_group = c("y...

回答 1 投票 0

Data.table 条件合并

我想使用 dt1 中变量的条件来合并两个 data.table。请参见以下示例: 库(数据.表) # 数据表示例 dt1 <- data.table(id = 1:5, var1 = c(1, 0, 1, 0, 1),...

回答 1 投票 0

R data.table 无需 for 循环即可从函数和连接设置列值的方法?

有没有一种方法使用 R data.table 来设置需要两级函数调用才能设置的列值,有没有一种方法可以在两个 data.table 之间的联接中设置列值? 示例:这个

回答 1 投票 0

定义一个索引,每次在r数据表中的某一列中找到相同值时该索引增加

我有一个如下所示的data.table: 例子 <- data.table(time = 1:30, A = c(rep("a", 5), rep("b", 5), rep("a", 5), r...

回答 1 投票 0

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