我认为你混淆了和的用途。可以上下添加数据框或命名列表,或两者同时添加。而则是水平合并数据框。
你似乎还对向量和列表感到困惑。在R中,可以接受每个元素不同的数据类型,而必须有相同类型的所有元素。 和都是一维的。当您使用时,要附加一个<命名> ,而不是一个命名/未命名的。
未命名的向量和列表
您定义的方式是使用函数。您定义<未命名>列表的方式是使用函数,如下所示:
vec1 = c(1, 10)
list1 = list(1, 10)
注意到
vec1
和
list1
都有两个元素,但是
list1
将这两个数字存储为两个单独的向量(元素
[[1]]
是向量
c(1)
,
[[2]]
是向量
c(10)
)。
命名向量和列表
您还可以创建命名向量和列表。方法如下:
vec2 = c(id = 1, numobs = 10)
list2 = list(id = 1, numobs = 10)
同样的数据结构,但元素有名称。
数据帧作为列表
请注意,list2
的每个元素名称前面都有一个 $
。这可能会让您了解到 data.frame
实际上是 list
,其中每一列都是 list
的一个元素,因为 df$column
经常用于从数据框中提取列。这是有道理的,因为 list
和 data.frame
都可以采用不同的数据类型,而不像 vectors
。
rbind
函数
当您的第一个元素是数据框时,rbind
要求您添加的元素与数据框的列具有相同的名称。现在,一个命名的 vector
将不起作用,因为 vector
的元素不被视为数据框的列,而一个命名的 list
如果名称相同,则与列匹配元素:
演示如下:
d<-data.frame(id=c(), numobs=c())
rbind(d, c(1, 10))
rbind(d, c(id = 1, numobs = 10))
rbind(d, list(1, 10))
rbind(d, list(id = 1, numobs = 10))
了解上述内容后,很明显您肯定也可以使用rbind
函数将两个具有相同列名的数据框合并:
df2 = data.frame(id = 1, numobs = 10)
rbind(d, df2)
numobs
,但在错误消息中,第二个名称似乎是nobs
。你能提供一个最小可重现的示例吗? - BenBarnesd2
的结构是怎样的?它是一个长度为二的向量列表吗? - Sven Hohenstein