我有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必须具有名称”。
我认为由于命名的行而发生此错误。我不想将它们移动到新的列或摆脱。有没有一种整齐的方法可以做到这一点?
答案 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)