将数据框附加到列表

Tom*_*Tom 14 r dataframe

我试图弄清楚如何将data.frame或data.table添加到列表中的第一个位置.

理想情况下,我想要一个结构如下的列表:

List of 4
 $  :'data.frame':  1 obs. of  3 variables:
  ..$ a: num 2
  ..$ b: num 1
  ..$ c: num 3
 $ d: num 4
 $ e: num 5
 $ f: num 6
Run Code Online (Sandbox Code Playgroud)

请注意,data.frame是列表结构中的一个对象.

问题是我需要在创建列表后将数据框添加到列表中,并且数据框必须是列表中的第一个元素.我想用简单的东西来做这件事append,但是当我尝试时:

append(list(1,2,3),data.frame(a=2,b=1,c=3),after=0)
Run Code Online (Sandbox Code Playgroud)

我得到一个结构列表:

str(append(list(1,2,3),data.frame(a=2,b=1,c=3),after=0))
List of 6
 $ a: num 2
 $ b: num 1
 $ c: num 3
 $  : num 1
 $  : num 2
 $  : num 3
Run Code Online (Sandbox Code Playgroud)

在我尝试时,似乎R正在将data.frame强制转换为列表append.我该如何阻止它这样做?或者可以使用什么替代方法来构造此列表,在列表的初始创建之后将data.frame插入位置1的列表中.

Ric*_*ven 21

您遇到的问题是,将数据框放在列表中的任何位置作为单个列表元素,必须将其包装list().我们来看一下.

df <- data.frame(1, 2, 3)
x <- as.list(1:3)
Run Code Online (Sandbox Code Playgroud)

如果我们只是包裹着c(),这就是append()在引擎盖下做的事情,我们得到了

c(df)
# $X1
# [1] 1
#
# $X2
# [1] 2
#
# $X3
# [1] 3
Run Code Online (Sandbox Code Playgroud)

但是如果我们把它包装起来,list()我们得到包含数据框的所需列表元素.

list(df)
# [[1]]
#   X1 X2 X3
# 1  1  2  3
Run Code Online (Sandbox Code Playgroud)

因此,既然x已经是一个列表,我们将需要使用以下构造.

c(list(df), x) ## or append(x, list(df), 0)
# [[1]]
#   X1 X2 X3
# 1  1  2  3
#
# [[2]]
# [1] 1
#
# [[3]]
# [1] 2
#
# [[4]]
# [1] 3
Run Code Online (Sandbox Code Playgroud)