我有嵌套数据表,将嵌套表展平为一个data.table的最佳方法是什么?请注意,嵌套表的长度可能不等,因此tidyr :: unnest()不起作用。
代码示例:
NestedTable <- data.table(
COLUMN1 = c('var1', 'var2','var3'),
COLUMN2 = c('col2a', 'col2b', 'col2c')
)
# add nested data.tables
NestedTable[ , NESTED_COL := list(list(data.table(
COLUMN4 = c(
'A', 'B'
),
COLUMN5 = c(
'C', 'D'
)
)))]
NestedTable[ , NESTED_COL2 := list(list(data.table(
COLUMN6 = c(
'A', 'B','C'
),
COLUMN7 = c(
'C', 'D','E'
)
)))]
# COLUMN1 COLUMN2 COLUMN4 COLUMN5 COLUMN6 COLUMN7
# 1: var1 col2a A C A C
# 2: var1 col2a B D B D
# 3: var1 col2a C E
# 4: var2 col2b A C A C
# 5: var2 col2b B D B D
# 6: var2 col2b C E
# 7: var3 col2c A C A C
# 8: var3 col2c B D B D
# 9: var3 col2c C E
答案 0 :(得分:3)
我们可以尝试unlist
NestedTable[, unlist(NESTED_COL, recursive=FALSE), .(COLUMN1, COLUMN2)]
答案 1 :(得分:2)
您可以使用tidyr
:
NestedTable %>%
tidyr::unnest(NESTED_COL)
#> COLUMN1 COLUMN2 COLUMN4 COLUMN5
#> 1: var1 col2a A C
#> 2: var1 col2a B D
#> 3: var2 col2b A C
#> 4: var2 col2b B D
#> 5: var3 col2c A C
#> 6: var3 col2c B D
答案 2 :(得分:0)
我认为tidyr::unnest_wider
和tidyr::unnest_longer
的混合应该可行。 unnest_wider
产生一个表列1-7。 unnest_longer
取消嵌套每个列表。
NestedTable%>%
unnest_wider(NESTED_COL)%>%
unnest_wider(NESTED_COL2)
# A tibble: 3 x 6
# COLUMN1 COLUMN2 COLUMN4 COLUMN5 COLUMN6 COLUMN7
# <chr> <chr> <list> <list> <list> <list>
#1 var1 col2a <chr [2]> <chr [2]> <chr [3]> <chr [3]>
#2 var2 col2b <chr [2]> <chr [2]> <chr [3]> <chr [3]>
#3 var3 col2c <chr [2]> <chr [2]> <chr [3]> <chr [3]>
NestedTable%>%
unnest_wider(NESTED_COL)%>%
unnest_wider(NESTED_COL2)%>%
unnest_longer(COLUMN4)%>%
unnest_longer(COLUMN5)%>%
unnest_longer(COLUMN6)%>%
unnest_longer(COLUMN7)
# A tibble: 108 x 6
# COLUMN1 COLUMN2 COLUMN4 COLUMN5 COLUMN6 COLUMN7
# <chr> <chr> <chr> <chr> <chr> <chr>
# 1 var1 col2a A C A C
# 2 var1 col2a A C A D
# 3 var1 col2a A C A E
# 4 var1 col2a A C B C
# 5 var1 col2a A C B D
# 6 var1 col2a A C B E
# 7 var1 col2a A C C C
# 8 var1 col2a A C C D
# 9 var1 col2a A C C E
#10 var1 col2a A D A C
# ... with 98 more rows