如何将dataframe列表转换为具有新列的dataframe,显示R中列表的名称

rab*_*_jx 5 r list typeconverter dataframe

我有一个数据框列表,对于每个列表,我有一个名称,它是USERID,以下是列表的示例:

$'AAAAAA'
AA  BB  CC
a   b   1
c   d   2
e   f   3
S'BBBBBB'
AA  BB  CC
g   h   1
i   j   2
k   l   3
Run Code Online (Sandbox Code Playgroud)

我的问题是如何将此列表转换为一个数据框,其中有一个显示USERID的新列,如下例所示:

AA  BB  CC  USERID
a   b   1   AAAAAA
c   d   2   AAAAAA
e   f   3   AAAAAA
g   h   1   BBBBBB
i   j   2   BBBBBB
k   l   3   BBBBBB
Run Code Online (Sandbox Code Playgroud)

任何想法如何做到这一点.非常感谢你提前

Ric*_*ven 6

由于cbind将其参数再循环到最长向量的长度,您可以尝试

Reduce(rbind, Map(cbind, x, USERID = names(x)))
#   AA BB CC USERID
# 1  a  b  1  AAAAA
# 2  c  d  2  AAAAA
# 3  e  f  3  AAAAA
# 4  g  h  1  BBBBB
# 5  i  j  2  BBBBB
# 6  k  l  3  BBBBB
Run Code Online (Sandbox Code Playgroud)

这里x

structure(list(AAAAA = structure(list(AA = c("a", "c", "e"), 
    BB = c("b", "d", "f"), CC = 1:3), .Names = c("AA", "BB", 
"CC"), class = "data.frame", row.names = c(NA, -3L)), BBBBB = structure(list(
    AA = c("g", "i", "k"), BB = c("h", "j", "l"), CC = 1:3), .Names = c("AA", 
"BB", "CC"), class = "data.frame", row.names = c(NA, -3L))), .Names = c("AAAAA", 
"BBBBB"))
Run Code Online (Sandbox Code Playgroud)


jaz*_*rro 6

另一种方式,使用开发版本tidyr:

# install.packages("devtools")
devtools::install_github("hadley/tidyr")
library(tidyr)

unnest(mylist, USERID)
#   USERID AA BB CC
# 1  AAAAA  a  b  1
# 2  AAAAA  c  d  2
# 3  AAAAA  e  f  3
# 4  BBBBB  g  h  1
# 5  BBBBB  i  j  2
# 6  BBBBB  k  l  3
Run Code Online (Sandbox Code Playgroud)

  • @jazzurro +1,最好在帖子中表明要明确.`库( 'devtools'); install_github( '哈德利/ tidyr'); 库(tidyr)` (2认同)