2017-10-13 9 views
1

を追加し、私はこのようなtibble持っていると言う:私は(unnestで例えば)リストをネスト解除することによって、より大きな新しいtibbleに変換したいデータフレームでのネスト解除ベクトルが、リストのインデックス列

tibble(x=22:23, y=list(4:6,4:7)) 

# A tibble: 2 × 2 
     x   y 
    <int> <list> 
1 22 <int [3]> 
2 23 <int [4]> 

を、どの私に7行のチブルを与えるだろう。しかし、私は新しい列を追加して、ネスト解除後の行の与えられたy値について、そのy値のインデックスがリスト形式であったときのものを教えてください。ここでは上記はこれをやった後、次のようになります:

# A tibble: 7 × 2 
     x  y index 
    <int> <int> <int> 
1 22  4  1 
2 22  5  2 
3 22  6  3 
4 23  4  1 
5 23  5  2 
6 23  6  3 
7 23  7  4 

答えて

4

を提訴することによって、あなたmapy超えるとネストを解除する前に、各要素のインデックスをバインドできます。

df %>% 
    mutate(y = map(y, ~ data.frame(y=.x, index=seq_along(.x)))) %>% 
    unnest() 

# A tibble: 7 x 3 
#  x  y index 
# <int> <int> <int> 
#1 22  4  1 
#2 22  5  2 
#3 22  6  3 
#4 23  4  1 
#5 23  5  2 
#6 23  6  3 
#7 23  7  4 
2

unnestgroup_by

library(tidyr) 
library(dplyr) 
df %>% 
    unnest(y)%>%group_by(x)%>%mutate(index=row_number()) 

# A tibble: 7 x 3 
# Groups: x [2] 
     x  y index 
    <int> <int> <int> 
1 22  4  1 
2 22  5  2 
3 22  6  3 
4 23  4  1 
5 23  5  2 
6 23  6  3 
7 23  7  4 
-1

また、rowwisedoを試すこともできます。ここで

library(tidyverse) 
tibble(x=22:23, y=list(4:6,4:7)) %>% 
    rowwise() %>% 
    do(tibble(x=.$x, y=unlist(.$y), index=1:length(.$y))) 
3

lengths

df %>% 
    mutate(index = lengths(y)) %>% 
    unnest(y) %>% 
    mutate(index = sequence(unique(index))) 
# A tibble: 7 x 3 
#  x index  y 
# <int> <int> <int> 
#1 22  1  4 
#2 22  2  5 
#3 22  3  6 
#4 23  1  4 
#5 23  2  5 
#6 23  3  6 
#7 23  4  7 
と別のバージョンである
関連する問題