r - 如何使用 bind_rows 将多个数据框与命名为日期的行绑定?我收到错误:bind_rows_(x, .id) 中的错误:参数 1 必须有名称
问题描述
我有多个 xts 类的数据框,收集在一个列表中,我想使用 bind_rows 将其组合到一个数据框,但保留行名。
library(xts)
library(dplyr)
data <- data.frame(a = c(1, 2, 3),
b = c(4, 5, 6))
dates <- as.Date(c("2019-01-31", "2019-02-28", "2019-03-31"))
假设具有以下三个 xts 数据帧是起点:
ts_data_1 <- as.xts(data[1, ], order.by = dates[1])
ts_data_2 <- as.xts(data[2, ], order.by = dates[2])
ts_data_3 <- as.xts(data[3, ], order.by = dates[3])
ts_list <- list(ts_data_1, ts_data_2, ts_data_3)
bind_rows(ts_list)
但是这不起作用并返回错误:“bind_rows_(x, .id) 中的错误:参数 1 必须有名称”。
我想这个错误是由于命名的行而发生的。我不想将它们移到新的列或摆脱它们。有没有一种巧妙的方法来做到这一点?
解决方案
如错误所述,它需要 data.frame/tibble 等。一种选择是创建一个tibble
library(tibble)
map_df(ts_list, as_tibble)
注意:使用上述内容,行名信息(index
of xts
)将丢失,因为tibble
不支持自定义行名
NOTE2:xts
对象有列名
colnames(ts_list[[1]])
#[1] "a" "b"
它不是错误的来源
如果我们也在另一个例子上这样做,得到同样的错误
bind_rows(list(matrix(1:5, dimnames = list(NULL, "a")),
matrix(1:10, dimnames = list(NULL, "a"))))
错误:参数 1 必须有名称
请注意,这两个矩阵都有列名。它与列名无关,但
一个base R
选择是
do.call(rbind, ts_list)
推荐阅读
- unreal-engine4 - UE4 增加 NAME_SIZE 限制
- amazon-web-services - 持续监控 EKS 节点组状态的最佳方法
- pip - Jupyter 找不到我的包,如何将我的内核连接到 pip 目标文件夹?
- sql - 谁被叫了?
- swift - 如何更新 UICollectionViewCell 标签?
- python-3.x - AttributeError:“列表”对象在 Python 中没有属性“x”
- html - How to create text field similar to Material UI text field without using Material UI library?
- deep-learning - 如何使用重新识别模型创建人员跟踪?
- saga - Eventuate Tram Sagas 中实现了哪种 Saga 模式?
- azure - 用于选择多个功能应用的 Azure Kusto 查询