2016-11-04 2 views
3

У меня есть таблица вложенных данных, что является лучшим способом сгладить вложенные таблицы на одну таблицу данных? Обратите внимание, что вложенные таблицы могут иметь неравную длину, поэтому tidyr :: unsest() не работает.R flatten inested data.table

Пример кода:

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 
+1

'tidyr :: unnest (NestedTable)' – hrbrmstr

+0

большой, спасибо много! это также эффективная функция, чтобы вложить ее снова? Так что предположим, что я хочу вложить выходную таблицу - column4 и column5 в вложенные data.table по столбцу1 и столбцу2 – user3463225

+0

, возможно, 'tidyr: nest()'? но поскольку это еще один вопрос, вы должны задать еще один вопрос. – hrbrmstr

ответ

2

Мы можем попытаться с unlist

NestedTable[, unlist(NESTED_COL, recursive=FALSE), .(COLUMN1, COLUMN2)] 
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 
+0

он не работает, когда имеется несколько вложенных данных. Table different length, ERROR: все вложенные столбцы должны иметь одинаковое количество элементов. – user3463225