Как связать несколько фреймов данных со строками, названными датами, используя bind_rows?Я получаю сообщение об ошибке: Ошибка в bind_rows_ (x, .id): аргумент 1 должен иметь имена - PullRequest
1 голос
/ 10 мая 2019

У меня есть несколько фреймов данных класса 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 Ответ

1 голос
/ 10 мая 2019

как говорится об ошибке, требуется data.frame / tibble и т. Д. Один из вариантов - создать tibble

library(tibble)
map_df(ts_list, as_tibble)

ПРИМЕЧАНИЕ. С учетом вышеизложенного информация об именах строк (indexxts) будет потеряно, потому что 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 должен иметь имена

Обратите внимание, чтообе матрицы имеют имена столбцов.Он не связан с именами столбцов, но параметр


A base R будет

do.call(rbind, ts_list)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...