我试图找出如何将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
请注意,data.frame是列表结构中的一个对象。
问题是我需要在创建列表后将数据框添加到列表中,并且数据框必须是列表中的第一个元素。我想使用像append
之类的简单内容来做这件事,但是当我尝试时:
append(list(1,2,3),data.frame(a=2,b=1,c=3),after=0)
我得到一个结构清单:
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
当我尝试append
时,R似乎将data.frame强制转换为列表。我该如何阻止它这样做?或者可以使用什么替代方法来构建此列表,在列表的初始创建之后将data.frame插入位置1的列表中。
答案 0 :(得分:17)
您遇到的问题是,要将数据框放在列表中的任何位置作为单个列表元素,它必须用list()
包装。我们来看看。
df <- data.frame(1, 2, 3)
x <- as.list(1:3)
如果我们用c()
包裹,append()
正在做什么,我们得到
c(df)
# $X1
# [1] 1
#
# $X2
# [1] 2
#
# $X3
# [1] 3
但是如果我们将它包装在list()
中,我们会得到包含数据框的所需列表元素。
list(df)
# [[1]]
# X1 X2 X3
# 1 1 2 3
因此,由于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