2017-12-04 5 views
1

Iの各要素は、私が非公開に()UNNEST()平坦化を(使用しようとした長さ2のリストを含むリスト列とtibbleを有します)と他のさまざまな組み合わせが、私の望む結果を得る運はありません。アンネストリストカラム

最小限の作業例は以下の通りです:

期待される成果と
df <- tibble(x = c('A', 'B'), 
     preds = list(list(Phi = data.frame(time = 1:2, estimate = c('y1', 'y2')), 
          p = data.frame(time = 1:2, estimate = c('y3', 'y4'))), 
         list(Phi = data.frame(time = 1:2, estimate = c('y5', 'y6')), 
          p = data.frame(time = 1:2, estimate = c('y7', 'y8'))))) 

output <- tibble(x = rep(c('A', 'B'), each = 4), 
      grp = c(rep(c('Phi', 'p'), each = 2), rep(c('Phi', 'p'), each = 2)), 
      time = rep(1:2, 4), 
      estimate = c('y1', 'y2', 'y3', 'y4', 'y5', 'y6', 'y7', 'y8')) 

次のコードは、私の一部の方法を取得し、私は簡単に他の列が含まれていますが、その正しいことができませんでした。

df$preds %>% flatten_df() 

グーグルの日の後、私はまだ固執しています。私はいくつかの方向で指摘してください.......多くの感謝!!!

+2

あなたに 'DF%>%に変異(preds =マップ(preds、bind_rows、.ID = 'GRP'))%>%unnest' – akrun

+0

@KevinArseneau悪気で試してみてください。私はちょうど完全な答えではないと感じました – akrun

答えて

1

すでにakrunの回答に基づいて、私は以下を提供しています。

library(tidyr) 
library(dplyr) 

df %>% 
    mutate(
    preds = lapply(
     preds, lapply, mutate, estimate = as.character(estimate) 
    ) %>% 
    lapply(bind_rows, .id = "grp") 
) %>% 
    unnest 

# # A tibble: 8 x 4 
#  x grp time estimate 
# <chr> <chr> <int> <chr> 
# 1  A Phi  1  y1 
# 2  A Phi  2  y2 
# 3  A  p  1  y3 
# 4  A  p  2  y4 
# 5  B Phi  1  y5 
# 6  B Phi  2  y6 
# 7  B  p  1  y7 
# 8  B  p  2  y8 

N.B.唯一の改善点は、要因ごとにestimateの変換です。さもなければ、これがソースデータで対処できる場合、akrunによるマップ解はより簡潔で推論が容易です。