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
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
我有多个 xts class 的数据帧,收集在一个列表中,我想使用 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)
但这不起作用,并且 returns 错误:"Error in bind_rows_(x, .id) : Argument 1 must have names"。
我想这个错误是由于指定的行引起的。我不想将它们移到新的专栏或摆脱掉。有没有一个巧妙的方法来做到这一点?
如错误所述,它需要数据。frame/tibble 等。一种选择是创建 tibble
library(tibble)
map_df(ts_list, as_tibble)
注意:使用上述内容,行名称信息(xts
的index
)将会丢失,因为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"))))
Error: Argument 1 must have names
请注意,两个矩阵都有列名。它与列名无关,但
一个base R
选项是
do.call(rbind, ts_list)
我有多个 xts class 的数据帧,收集在一个列表中,我想使用 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)
但这不起作用,并且 returns 错误:"Error in bind_rows_(x, .id) : Argument 1 must have names"。
我想这个错误是由于指定的行引起的。我不想将它们移到新的专栏或摆脱掉。有没有一个巧妙的方法来做到这一点?
如错误所述,它需要数据。frame/tibble 等。一种选择是创建 tibble
library(tibble)
map_df(ts_list, as_tibble)
注意:使用上述内容,行名称信息(xts
的index
)将会丢失,因为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"))))
Error: Argument 1 must have names
请注意,两个矩阵都有列名。它与列名无关,但
一个base R
选项是
do.call(rbind, ts_list)