他の列の情報を保持したままデータフレーム列をリスト解除する 質問する

他の列の情報を保持したままデータフレーム列をリスト解除する 質問する

文字ベクトルcol1list列の2 つの列で構成されるデータ フレームがありますcol2

myVector <- c("A","B","C","D")

myList <- list()
myList[[1]] <- c(1, 4, 6, 7)
myList[[2]] <- c(2, 7, 3)
myList[[3]] <- c(5, 5, 3, 9, 6)
myList[[4]] <- c(7, 9)

myDataFrame <- data.frame(row = c(1,2,3,4))

myDataFrame$col1 <- myVector
myDataFrame$col2 <- myList

myDataFrame
# row col1          col2
# 1   1    A    1, 4, 6, 7
# 2   2    B       2, 7, 3
# 3   3    C 5, 5, 3, 9, 6
# 4   4    D          7, 9

col2リスト内のベクトルの各要素について、に格納されている情報を引き続き保持しながら、をリスト解除したいと思いますcol1。言い換えると、一般的に使用されるデータ フレームの再形成用語では、「広い」リスト列は「長い」形式に変換する必要があります。

最終的には、長さが の 2 つのベクトルが必要になりますlength(unlist(myDataFrame$col2))。コードでは次のようになります。

# unlist myList
unlist.col2 <- unlist(myDataFrame$col2)
unlist.col2
# [1] 1 4 6 7 2 7 3 5 5 3 9 6 7 9

# unlist myVector to obtain
# unlist.col1 <- ???
# unlist.col1
# [1] A A A A B B B C C C C C D D

それを手に入れる簡単な方法は思いつきません。

ベストアンサー1

unnestパッケージから使用することもできますtidyr:

library(tidyr)
unnest(myDataFrame, col2)

#      row  col1  col2
#    (dbl) (chr) (dbl)
# 1      1     A     1
# 2      1     A     4
# 3      1     A     6
# 4      1     A     7
# 5      2     B     2
# 6      2     B     7
# 7      2     B     3
# 8      3     C     5
# 9      3     C     5
# 10     3     C     3
# 11     3     C     9
# 12     3     C     6
# 13     4     D     7
# 14     4     D     9

おすすめ記事