gpt4 book ai didi

r - 将列表 append 到 R 中的数据框

转载 作者:行者123 更新时间:2023-12-04 21:20:30 25 4
gpt4 key购买 nike

我在 R 中创建了一个包含两列的空数据框:

d<-data.frame(id=c(), numobs=c())

我想将这个数据框(在一个循环中) append 一个列表, d1有输出:
[1] 1  100

我尝试使用 rbind :
d<-rbind(d, d2)

merge :
d<-merge(d, d2)

我什至尝试制作一个列表列表,然后将其转换为数据框,然后给出该数据框的名称:
d<-rbind(dlist1, dlist2)
dframe<-data.frame(d)
names(dframe)<-c("id","numobs")

但是这些似乎都不符合常规检查器的标准(这是一个类),这给出了错误:
Error: all(names(cc) %in% c("id", "nobs")) is not TRUE

即使它在我的工作区中运行良好。

这是令人沮丧的,因为错误没有揭示错误发生的位置。

任何人都可以帮助我合并 2 个数据框或将数据框 append 到列表中吗?

最佳答案

我认为您混淆了 rbind 的目的和 merge . rbind append data.frames 或命名列表,或垂直 append 。虽然 merge水平组合 data.frames。

你好像也被vector弄糊涂了的和 list的。在 R 中,list可以为每个元素采用不同的数据类型,而 vector必须具有相同类型的所有元素。两者 listvector是一维的。当您使用 rbind你想 append 一个命名 list , 不是 有名/无名 vector .

未命名的向量和列表

您定义 vector 的方式与 c()功能。定义未命名列表的方式是使用 list()函数,像这样:

vec1 = c(1, 10)
# > vec1
# [1] 1 10

list1 = list(1, 10)
# > list1
# [[1]]
# [1] 1
#
# [[2]]
# [1] 10

请注意, vec1list1有两个元素,但是 list1将两个数字存储为两个单独的向量(元素 [[1]] 向量 c(1)[[2]] 向量 c(10) )

命名向量和列表

您还可以创建命名向量和列表。你这样做:
vec2 = c(id = 1, numobs = 10)
# > vec2
# id numobs
# 1 10

list2 = list(id = 1, numobs = 10)
# > list2
# $id
# [1] 1
#
# $numobs
# [1] 10

两者的数据结构相同,但元素已命名。

数据框作为列表

请注意 list2有一个 $在每个元素名称前面。这可能会给你一些线索 data.frame的实际上是 list的每一列都是 list 的一个元素, 自 df$column通常用于从数据框中提取列。这是有道理的,因为 list的和 data.frame 's 可以采用不同的数据类型,不像 vectors的。
rbind功能

当您的第一个元素是数据框时, rbind要求您 append 的内容与数据框的列具有相同的名称。现在,一个名为 vector不会工作,因为 vector 的元素不被视为数据帧的列,而名为 list如果名称相同,则匹配具有列的元素:

展示:
d<-data.frame(id=c(), numobs=c())

rbind(d, c(1, 10))
# X1 X10
# 1 1 10

rbind(d, c(id = 1, numobs = 10))
# X1 X10
# 1 1 10

rbind(d, list(1, 10))
# X1 X10
# 1 1 10

rbind(d, list(id = 1, numobs = 10))
# id numobs
# 1 1 10

了解以上内容,显然您也可以 rbind列名匹配的两个数据框:
df2 = data.frame(id = 1, numobs = 10)

rbind(d, df2)
# id numobs
# 1 1 10

关于r - 将列表 append 到 R 中的数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12740784/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com