如何使用bind_rows将多个数据框与名为日期的行绑定?我收到错误消息:bind_rows_(x,.id)错误:参数1必须具有名称

时间:2019-05-10 15:05:04

标签: r dplyr xts

我有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 个答案:

答案 0 :(得分:1)

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

library(tibble)
map_df(ts_list, as_tibble)

注意:使用上述方法,行名称信息(index中的xts)将丢失,因为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)