描述

    在data.frame中创建或融化列表列。

    tidyr中nest和unnest的模拟功能。

    unnest_dt将自动删除目标列表列以外的其他列表列(稍后将取消嵌套)。另外,squeeze_dt设计用于将多个列合并到列表列中。

    嵌套和嵌套还原 - 图1

    细节

    在nest_dt中,数据将嵌套到名为“ndt”的列中,“ndt”是nested data.table的缩写。

    squeeze_dt不会删除原来的列。

    unchop_dt是chop_dt的反向操作。

    这些函数都处于实验阶段,特别是unnest_dt。如果他们不能在某些场合工作,尝试tidyr包。

    1. # examples for nest_dt
    2. # nest by which columns?
    3. mtcars %>% nest_dt(cyl)
    4. mtcars %>% nest_dt("cyl")
    5. mtcars %>% nest_dt(cyl,vs)
    6. mtcars %>% nest_dt(vs:am)
    7. mtcars %>% nest_dt("cyl|vs")
    8. mtcars %>% nest_dt(c("cyl","vs"))
    9. # change the nested column name
    10. mtcars %>% nest_dt(cyl,.name = "data")
    11. # nest two columns directly
    12. iris %>% nest_dt(mcols = list(petal="^Pe",sepal="^Se"))
    13. # nest more flexibly
    14. iris %>% nest_dt(mcols = list(ndt1 = 1:3,
    15. ndt2 = "Pe",
    16. ndt3 = Sepal.Length:Sepal.Width))
    17. # examples for unnest_dt
    18. # unnest which column?
    19. mtcars %>% nest_dt("cyl|vs") %>%
    20. unnest_dt(ndt)
    21. mtcars %>% nest_dt("cyl|vs") %>%
    22. unnest_dt("ndt")
    23. df <- data.table(
    24. a = list(c("a", "b"), "c"),
    25. b = list(c(TRUE,TRUE),FALSE),
    26. c = list(3,c(1,2)),
    27. d = c(11, 22)
    28. )
    29. df
    30. df %>% unnest_dt(a)
    31. df %>% unnest_dt(2)
    32. df %>% unnest_dt("c")
    33. df %>% unnest_dt(cols = names(df)[3])
    34. # You can unnest multiple columns simultaneously
    35. df %>% unnest_dt(1:3)
    36. df %>% unnest_dt(a,b,c)
    37. df %>% unnest_dt("a|b|c")
    38. # examples for squeeze_dt
    39. # nest which columns?
    40. iris %>% squeeze_dt(1:2)
    41. iris %>% squeeze_dt("Se")
    42. iris %>% squeeze_dt(Sepal.Length:Petal.Width)
    43. iris %>% squeeze_dt(1:2,.name = "data")
    44. # examples for chop_dt
    45. df <- data.table(x = c(1, 1, 1, 2, 2, 3), y = 1:6, z = 6:1)
    46. df %>% chop_dt(y,z)
    47. df %>% chop_dt(y,z) %>% unchop_dt(y,z)