Цель
Удаление элемента error
и объединение всех столбцов вложенного фрейма данных с использованием пакета purrr
.Пожалуйста, подскажите, какие функции я могу использовать для получения желаемого результата.
Пример данных
Я загрузил небольшое подмножество данных, которые вы можете найти здесь: https://1drv.ms/u/s!AsMFpkDhWcnw7xvU4JLg1Al9AqzA
Вы можете загрузить его: load(file = here::here("data", "raw_data", "veh.Rda"))
А затем: ds_mainline_nested_acc <- veh
Вложенные данные
У меня есть следующие результаты из подбора модели:
ds_mainline_nested_acc <- ds_mainline %>%
group_by(file.ID2, LV, chunk_of_speed) %>%
nest() %>%
mutate(acc_mps2.ED = furrr::future_map(data, safely(find_acc), .progress = TRUE))
> ds_mainline_nested_acc
# A tibble: 2,676 x 5
file.ID2 LV chunk_of_speed data acc_mps2.ED
<chr> <chr> <dbl> <list> <list>
1 Cars_01 WhiteC2 1 <tibble [1,857 x 148]> <list [2]>
2 Cars_01 WhiteC2 2 <tibble [1,856 x 148]> <list [2]>
3 Cars_01 WhiteC2 3 <tibble [1,856 x 148]> <list [2]>
4 Cars_01 WhiteC2 4 <tibble [1,856 x 148]> <list [2]>
5 Cars_01 WhiteC2 5 <tibble [1,857 x 148]> <list [2]>
6 Cars_01 Ford1 1 <tibble [549 x 148]> <list [2]>
7 Cars_01 Ford1 2 <tibble [549 x 148]> <list [2]>
8 Cars_01 Ford1 3 <tibble [549 x 148]> <list [2]>
9 Cars_01 Ford1 4 <tibble [549 x 148]> <list [2]>
10 Cars_01 Ford1 5 <tibble [549 x 148]> <list [2]>
# ... with 2,666 more rows
Структура списка
> ds_mainline_nested_acc %>% select(-data) %>% transpose() %>% simplify_all() %>% str(list.len = 4)
List of 2676
$ :List of 4
..$ file.ID2 : chr "Cars_01"
..$ LV : chr "WhiteC2"
..$ chunk_of_speed: num 1
..$ acc_mps2.ED :List of 2
.. ..$ result:'data.frame': 1857 obs. of 2 variables:
.. .. ..$ Time : num [1:1857] 383 383 383 383 383 ...
.. .. ..$ acc_mps2.ED: num [1:1857] 0.0515 0.0515 0.0515 0.0515 0.0515 ...
.. ..$ error : NULL
$ :List of 4
..$ file.ID2 : chr "Cars_01"
..$ LV : chr "WhiteC2"
..$ chunk_of_speed: num 2
..$ acc_mps2.ED :List of 2
.. ..$ result:'data.frame': 1856 obs. of 2 variables:
.. .. ..$ Time : num [1:1856] 414 414 414 414 414 ...
.. .. ..$ acc_mps2.ED: num [1:1856] 0.646 0.646 0.646 0.646 0.646 ...
.. ..$ error : NULL
$ :List of 4
..$ file.ID2 : chr "Cars_01"
..$ LV : chr "WhiteC2"
..$ chunk_of_speed: num 3
..$ acc_mps2.ED :List of 2
.. ..$ result:'data.frame': 1856 obs. of 2 variables:
.. .. ..$ Time : num [1:1856] 445 445 445 445 445 ...
.. .. ..$ acc_mps2.ED: num [1:1856] -0.395 -0.395 -0.395 -0.395 -0.395 ...
.. ..$ error : NULL
$ :List of 4
..$ file.ID2 : chr "Cars_01"
..$ LV : chr "WhiteC2"
..$ chunk_of_speed: num 4
..$ acc_mps2.ED :List of 2
.. ..$ result:'data.frame': 1856 obs. of 2 variables:
.. .. ..$ Time : num [1:1856] 476 476 476 476 476 ...
.. .. ..$ acc_mps2.ED: num [1:1856] -0.534 -0.534 -0.534 -0.534 -0.534 ...
.. ..$ error : NULL
[list output truncated]
Что мне нужно сделать
Столбец списка acc_mps2.Ed
содержит список в каждой строке.Список содержит элементы result
и error
.Элемент result
представляет собой фрейм данных, содержащий 2 столбца.Я хочу получить окончательный вывод со следующими столбцами:
file.ID2 LV chunk_of_speed Time acc_mps2.ED
По сути, я хочу избавиться от элемента error
и объединить все столбцы списка data
и acc_mps2.ED
.
То, что я пробовал
Я прочитал очень много постов на блоге, но до сих пор не могу понять, как удалить элемент error
и объединить столбцы.Я также пробовал разные функции purrr
.Например:
> ds_mainline_nested_acc %>% transpose() %>% simplify_all() %>% compact() %>% unlist() %>% head()
$file.ID2
[1] "Cars_01"
$LV
[1] "WhiteC2"
$chunk_of_speed
[1] 1
$data.file.ID1
[1] "Cars_20160601_01.hdf5"
$data.file.ID2
[1] "Cars_20160601_01.hdf5"
$data.file.ID3
[1] "Cars_20160601_01.hdf5"
Очевидно, что результат отсутствует в выводе данных.Я также попробовал:
> ds_mainline_nested_acc %>% transpose() %>% simplify_all() %>% compact() %>% map_df(.$acc_mps2.ED)
Error: Can't convert NULL to function
Call `rlang::last_error()` to see a backtrace
Что мне не хватает?Разве compact()
не должен удалять значения NULL
?Подскажите, пожалуйста, какие функции я могу использовать для получения желаемого результата?