如何使用data.table通过累积比较确定值

用户名

我正在寻找一种确定data.table下面每个子组的父组的方法

    Group SubGroup Level Parent
 1:     A       A1     0     NA
 2:     A       A2     1     A1
 3:     A       A3     1     A1
 4:     A       A4     2     A3
 5:     A       A5     3     A4
 6:     A       A6     3     A4
 7:     A       A7     3     A4
 8:     A       A8     2     A3
 9:     A       A9     2     A3
10:     A      A10     2     A3

这是我正在使用的计算,但是我想知道是否有更好的方法。我的实际数据集包括多个组,因此我也想by=在计算中添加一个参数。可以假设父级是最大索引小于当前行且级别小于当前级别的子组。

tmp = data.table(Group = "A", SubGroup = paste0("A", 1:10),
                 Level = c(0, 1, 1, 2, 3, 3, 3, 2, 2, 2))
tmp[, Parent := sapply(1:nrow(tmp), function(x)
  tmp[, SubGroup[(suppressWarnings(max(which(Level[1:x] < Level[x]))))]])]
埃迪
dt = data.table(Group = "A", SubGroup = paste0("A", 1:11),
                             Level = c(0, 1, 1, 2, 3, 3, 3, 2, 2, 2, 3))

# need another grouping layer, to satisfy the row requirements
dt[, rowGroup := cumsum(c(0, diff(Level) != 0)), by = Group]

# get the parent for each Level and rowGroup
parents = dt[, .(Level = Level[.N] + 1, Parent = SubGroup[.N]), by = .(Group, rowGroup)]

setkey(parents, Group, Level, rowGroup)
setkey(dt, Group, Level, rowGroup)

# rolling merge that matches to previous rowGroup
parents[dt, roll = T][order(Group, rowGroup)]
#    Group rowGroup Level Parent SubGroup
# 1:     A        0     0     NA       A1
# 2:     A        1     1     A1       A2
# 3:     A        1     1     A1       A3
# 4:     A        2     2     A3       A4
# 5:     A        3     3     A4       A5
# 6:     A        3     3     A4       A6
# 7:     A        3     3     A4       A7
# 8:     A        4     2     A3       A8
# 9:     A        4     2     A3       A9
#10:     A        4     2     A3      A10
#11:     A        5     3    A10      A11

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

通过使用VBA我如何比较值

来自分类Dev

如何使用data-属性通过jQuery传递值?

来自分类Dev

如何使用data-属性通过jQuery传递值?

来自分类Dev

使用data.table中某些列的值来确定将使用哪些剩余列

来自分类Dev

F#如何通过match语句确定值的类型?

来自分类Dev

使用.SD的data.table中的列子集的累积总和

来自分类Dev

如何通过函数使用Javascript变量分配php变量。值不是由html元素确定的

来自分类Dev

根据先前的值确定data.table列的范围

来自分类Dev

确定列值在data.table中是否唯一

来自分类Dev

如何比较通过输入框输入的值

来自分类Dev

如何通过纯 JavaScript 比较两个时间值?

来自分类Dev

通过使用值计数拆分熊猫字符串比较

来自分类Dev

如何仅通过使用python中的if条件将list的值与函数值进行比较?

来自分类Dev

如何使用数组中的值通过2行比较来选择mysql中的表?

来自分类Dev

比较data.table中的连续行并替换行值

来自分类Dev

比较R data.table中多个列值的向量

来自分类Dev

比较for循环中数字的绝对值以确定是否要使用它?

来自分类Dev

用累积总和重塑data.table

来自分类Dev

如何通过使用“Case”语句比较多列中的值来检索具有最大值的列名

来自分类Dev

如何通过 pcre-heavy 使用 Data.Text

来自分类Dev

Learning data.table-如何通过行号和列名更新值

来自分类Dev

如何通过引用更改data.table中每个组中的最后一个值

来自分类Dev

如何在Java中累积值?

来自分类Dev

如何使用jstl比较2个值

来自分类Dev

在实体框架中使用累积的桶值

来自分类Dev

如何在data.table中使用规则的字符串值序列创建新列?

来自分类Dev

如何按多列分组并使用data.table选择前1个值

来自分类Dev

如何使用data.table获取R中键的每个值的百分比?

来自分类Dev

使用data.table时如何避免奇怪的umlaute错误

Related 相关文章

  1. 1

    通过使用VBA我如何比较值

  2. 2

    如何使用data-属性通过jQuery传递值?

  3. 3

    如何使用data-属性通过jQuery传递值?

  4. 4

    使用data.table中某些列的值来确定将使用哪些剩余列

  5. 5

    F#如何通过match语句确定值的类型?

  6. 6

    使用.SD的data.table中的列子集的累积总和

  7. 7

    如何通过函数使用Javascript变量分配php变量。值不是由html元素确定的

  8. 8

    根据先前的值确定data.table列的范围

  9. 9

    确定列值在data.table中是否唯一

  10. 10

    如何比较通过输入框输入的值

  11. 11

    如何通过纯 JavaScript 比较两个时间值?

  12. 12

    通过使用值计数拆分熊猫字符串比较

  13. 13

    如何仅通过使用python中的if条件将list的值与函数值进行比较?

  14. 14

    如何使用数组中的值通过2行比较来选择mysql中的表?

  15. 15

    比较data.table中的连续行并替换行值

  16. 16

    比较R data.table中多个列值的向量

  17. 17

    比较for循环中数字的绝对值以确定是否要使用它?

  18. 18

    用累积总和重塑data.table

  19. 19

    如何通过使用“Case”语句比较多列中的值来检索具有最大值的列名

  20. 20

    如何通过 pcre-heavy 使用 Data.Text

  21. 21

    Learning data.table-如何通过行号和列名更新值

  22. 22

    如何通过引用更改data.table中每个组中的最后一个值

  23. 23

    如何在Java中累积值?

  24. 24

    如何使用jstl比较2个值

  25. 25

    在实体框架中使用累积的桶值

  26. 26

    如何在data.table中使用规则的字符串值序列创建新列?

  27. 27

    如何按多列分组并使用data.table选择前1个值

  28. 28

    如何使用data.table获取R中键的每个值的百分比?

  29. 29

    使用data.table时如何避免奇怪的umlaute错误

热门标签

归档