【问题标题】:How to bind multiple data frames with rows named as dates using bind_rows? I’m getting error: Error in bind_rows_(x, .id) : Argument 1 must have names如何使用 bind_rows 将多个数据框与命名为日期的行绑定?我收到错误:bind_rows_(x, .id) 中的错误:参数 1 必须有名称
【发布时间】:2019-09-28 12:31:01
【问题描述】:

我有多个 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 必须有名称”。

我想这个错误是由于命名的行而发生的。我不想将它们移到新的列或摆脱它们。有没有一种巧妙的方法来做到这一点?

【问题讨论】:

  • 不是因为命名的行,而是因为,正如错误所说,参数 1(ts_listts_data_1 中的第一项)没有名称,即 column 名字

标签: r dplyr xts


【解决方案1】:

由于错误状态,它需要一个 data.frame/tibble 等。一种选择是创建一个tibble

library(tibble)
map_df(ts_list, as_tibble)

注意:使用上述内容,行名信息(xtsindex)将丢失,因为tibble 不支持自定义行名

注意 2: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)

【讨论】:

    猜你喜欢
    • 2019-03-01
    • 2018-07-08
    • 1970-01-01
    • 1970-01-01
    • 2021-10-15
    • 2020-01-10
    • 1970-01-01
    • 1970-01-01
    • 2021-02-09
    相关资源
    最近更新 更多