У меня есть список, где каждый элемент представляет собой фрейм данных с одинаковыми именами столбцов, один из столбцов имеет класс Interval (из пакета lubridate). Я хочу связать все отдельные фреймы данных в списке в один фрейм данных. К сожалению, использование rbind и bind_rows приводит столбец интервала в число c, и я получаю следующее предупреждение.
Предупреждающие сообщения: 1: В bind_rows_ (x, .id): векторизованные элементы 'Interval' могут не сохранять свои атрибуты
library(dplyr)
library(lubridate)
#Create sample list length 2 actually list length ~18,000
test <- list(BGC119AP01 = structure(list(participant_code = "BGC119AP01",
interval_1 = new("Interval", .Data = 34128000, start = structure(1479427200, class = c("POSIXct",
"POSIXt"), tzone = "UTC"), tzone = "UTC")), class = c("grouped_df",
"tbl_df", "tbl", "data.frame"), row.names = c(NA, -1L), groups = structure(list(
participant_code = "BGC119AP01", .rows = list(1L)), row.names = c(NA,
-1L), class = c("tbl_df", "tbl", "data.frame"), .drop = FALSE)),
BGC119AP02 = structure(list(participant_code = "BGC119AP02",
interval_1 = new("Interval", .Data = 34128000, start = structure(1479427200, class = c("POSIXct",
"POSIXt"), tzone = "UTC"), tzone = "UTC")), class = c("grouped_df",
"tbl_df", "tbl", "data.frame"), row.names = c(NA, -1L), groups = structure(list(
participant_code = "BGC119AP02", .rows = list(1L)), row.names = c(NA,
-1L), class = c("tbl_df", "tbl", "data.frame"), .drop = FALSE)))
#Attempt bind rows both ending in the above warning.
do.call(rbind, test)
do.call(bind_rows, test)
OUTPUT Принудительный интервал_1 принудительно приведен удваивается и теряет свои атрибуты
# A tibble: 2 x 2
# Groups: participant_code [2]
participant_code interval_1
<chr> <dbl>
1 BGC119AP01 34128000
2 BGC119AP02 34128000
Warning messages:
1: In bind_rows_(x, .id) :
Vectorizing 'Interval' elements may not preserve their attributes
2: In bind_rows_(x, .id) :
Vectorizing 'Interval' elements may not preserve their attributes
Это, вероятно, связано с тем, что столбцы интервала класса не являются атомами c векторов. Мне известно, что я мог бы решить эту проблему, сохранив исходные даты начала и окончания, а затем создав столбец интервала после привязки строк, но я хотел бы найти решение, позволяющее мне связывать все отдельные фреймы данных в списке, сохраняя при этом целостность столбца интервала класса и для решения быть масштабируемым до 18 000 строк. Большое спасибо заранее