gpt4 book ai didi

r - 查找与值关联的子组并计算每个 ID 中的连续子组

转载 作者:行者123 更新时间:2023-12-04 11:04:35 28 4
gpt4 key购买 nike

我请求您帮助设计一个非常有效的解决方案来快速遍历 14kk 行的表。

基本上,问题包括为每个 ID 找到 Value==0 的子组,并从他开始计算 Value==0 的连续子组(在每个 ID 内)的数量。

这个新信息需要保存在一个由“ID”、“subgroup”和“Count”组成的外部表中。

为了尽可能清楚,我将举一个例子。
假设我们有以下数据库:

ID <- (1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3)   
subgroup <- c("1a1p", "1a2p", "1a3p", "2a1p", "2a2p", "2a3p", "2a4p", "2a5p", "2a6p", "3a1p", "3a2p", "3a3p", "3a4p", "3a5p")
Value <- c(2000, 0, 0, 0, 0, 0, 0, 2000, 1800, 0, 0 , 0, 1750, 0)

df <- data.frame(ID, subgroup, Value)

对于每个ID,我们需要找到一个Value == 0对应的所有subgroup然后count Value == 0 的连续 ID 的个数。
因此,解决方案必须如下所示:

ID <- c(1, 2, 3, 3)    
subgroup <- c("1a2p", "2a2p", "3a1p", "3a5p")
count <- c(1, 3, 2, 0)
solution_df <- data.frame(ID, subgroup, count)

请注意,子组 == "1a2p"count == 0 一起出现,这意味着它具有 Value == 0 但有 0 个 subgroup 连续到他具有相同的 Value == 0

我真的希望我尽可能清楚。


使用 system.info() 对问题的先前版本测量的性能,该版本仅考虑特征 subgroupValue:

data.table 方法

user: 881.21  system: 109.73  elapsed: 993.43  

dplyr 方法

user: 91.66  system: 0.56  elapsed: 93.05  

基础 R 方法

user: 1.67 system: 0.29  elapsed: 2.06



更新

更新任务的表现:

dplyr 方法

user: 75.28  system: 1.00  elapsed: 77.16

基础 R 方法

user: 104.75 system: 0.61  elapsed: 105.74

最佳答案

这里有一个使用data.table的想法,

library(data.table)

setDT(df)[, grp := rleid(Value == 0)][
Value == 0, .(ID = first(ID), count = .N - 1), by = grp]

这给出了,

   grp   ID count
1: 2 1a2p 0
2: 4 2a2p 2
3: 6 3a1p 2
4: 8 3a5p 0

关于r - 查找与值关联的子组并计算每个 ID 中的连续子组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47548554/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com