gpt4 book ai didi

通过唯一 ID 递归计算数据框中的子项数

转载 作者:行者123 更新时间:2023-12-04 17:26:08 24 4
gpt4 key购买 nike

我有一个数据框(大约 400 万行),其中每一行都有一个唯一的 ID、一个父 ID 及其在层次结构中的级别:

   comment_id comment_parent comment_lvl
1 1049997196 1049997055 3
2 1052635064 2000116664444 0
3 1053256308 1053255205 2
4 1053367761 1053366805 1
5 1054579447 2000117646770 0
6 1054944680 1054821961 1
7 1051053522 1051053049 6
8 1052558482 2000116611974 0
9 1056095951 1056095543 1
10 1053611186 1053565222 2

我想计算每个顶级项目的 child 总数 (comment_lvl == 0)。我的预期输出是这样的聚合:

   comment_id    comment_lvl    total_replies
2 1052635064 0 123
5 1054579447 0 45
8 1052558482 0 2

我不确定如何有效地解决这个问题,因为数据集很大而且深度相当大(大约 150)。

编辑:

提供一个工作示例:

comment_id <- c('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', '1', '2', '3', '4', '5', '6', '7', '8')
parent_id <- c('0', 'A', 'B', 'B', 'A', 'E', 'F', 'G', '0', '1', '2', '2', '1', '5', '6', '7')
lvl <- c(0, 1, 2, 2, 1, 2, 3, 4, 0, 1, 2, 2, 1, 2, 3, 4)

df <- data.frame(comment_id, parent_id, lvl)

数据如下所示:

   comment_id parent_id lvl
1 A 0 0
2 B A 1
3 C B 2
4 D B 2
5 E A 1
6 F E 2
7 G F 3
8 H G 4
9 1 0 0
10 2 1 1
11 3 2 2
12 4 2 2
13 5 1 1
14 6 5 2
15 7 6 3
16 8 7 4

预期结果:

  comment_id    total_replies
1 A 7
2 1 7

最佳答案

这是一个带有igraph的选项

library(igraph)
g <- graph_from_data_frame(subset(df[2:1], lvl != 0))
dfout <- rev(
stack(
sapply(
with(df, unique(comment_id[lvl == 0])),
function(x) sum(clusters(g)$membership == clusters(g)$membership[x]) - 1
)
)
)

给出

  ind values
1 A 7
2 1 7

关于通过唯一 ID 递归计算数据框中的子项数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63300474/

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