R 无法取消列出具有不同列类型的数据框

R 无法取消列出具有不同列类型的数据框,r,tidyr,unnest,R,Tidyr,Unnest,我正在从包装在R包中的API中提取一些道路交通数据。我使用列表数据框来控制多组记录的下载 # install.packages(webTRISr) library(webTRISr) library(tidyverse) sites <- c(5745, 6345) start_date = '01112017' end_date = '31122017' road_reports <- data_frame(sites, start_date, end_date) %>%

我正在从包装在R包中的API中提取一些道路交通数据。我使用列表数据框来控制多组记录的下载

# install.packages(webTRISr)
library(webTRISr)
library(tidyverse)

sites <- c(5745, 6345)
start_date = '01112017'
end_date = '31122017'

road_reports <- data_frame(sites, start_date, end_date) %>% 
  mutate(data = purrr::pmap(list(sites, start_date, end_date), webTRISr::webtris_report, report_type = "daily"))
这是因为“Site Name”列在来自API的一个调用中是一个字符,但在另一个调用中是双精度的

从这个已经关闭的
tidyr
问题()中,我认为这被认为是一个bug,并在
tidyr
v1.0.0中进行了排序

有什么新的想法吗?来自的解决方案给出了相同的错误

我尝试将
ptype
参数传递到
unnest()
以强制数据类型,但得到有损强制转换错误,即:

ptype <- data_frame('Site Name'= character(),
                'Report Date' = as.POSIXct(character(), tz = "UTC"),
                'Time Period Ending' = hms::as_hms(character()),
                'Time Interval' = double(),
                '0 - 520 cm' = double(),
                '521 - 660 cm' = double(),
                '661 - 1160 cm' = double(),
                '1160+ cm' = double(),
                '0 - 10 mph' = logical(),
                '11 - 15 mph' = logical(),
                '16 - 20 mph' = logical(),
                '21 - 25 mph' = logical(),
                '26 - 30 mph' = logical(),
                '31 - 35 mph' = logical(),
                '36 - 40 mph' = logical(),
                '41 - 45 mph' = logical(),
                '46 - 50 mph' = logical(),
                '51 - 55 mph' = logical(),
                '56 - 60 mph' = logical(),
                '61 - 70 mph' = logical(),
                '71 - 80 mph' = logical(),
                '80+ mph' = logical(),
                'Avg mph' = double(),
                'Total Volume' = double()
                )

road_reports %>% 
  unnest(data, ptype = ptype)

#Error: Lossy cast from <data.frame<data:data.frame< Site Name : character Report Date : datetime<UTC> Time Period Ending: time Time Interval : double
.
.
.
ptype%
unnest(数据,ptype=ptype)

#错误:的有损转换选项是转换为普通类型,然后执行
取消测试
,然后使用
类型更改类型。转换

library(purrr)
library(dplyr)
road_reports %>% 
    mutate(data = map(data, ~ .x %>% 
              mutate_all(as.character))) %>% 
    unnest(data) %>%
    type.convert
    # type.convert(., as.is = TRUE) # to avoid getting factor columns
# A tibble: 11,232 x 27
#   sites start_date end_date `Site Name` `Report Date` `Time Period En… `Time Interval` `0 - 520 cm` `521 - 660 cm` `661 - 1160 cm` `1160+ cm`
#   <int>      <int>    <int> <fct>       <fct>         <fct>                      <int>        <int>          <int>           <int>      <int>
# 1  5745    1112017 31122017 M1/5170L    2017-11-01    00:14:59                       0           NA             NA              NA         NA
# 2  5745    1112017 31122017 M1/5170L    2017-11-01    00:29:59                       1           NA             NA              NA         NA
# 3  5745    1112017 31122017 M1/5170L    2017-11-01    00:44:59                       2           NA             NA              NA         NA
# 4  5745    1112017 31122017 M1/5170L    2017-11-01    00:59:59                       3           NA             NA              NA         NA
# 5  5745    1112017 31122017 M1/5170L    2017-11-01    01:14:59                       4           NA             NA              NA         NA
# 6  5745    1112017 31122017 M1/5170L    2017-11-01    01:29:59                       5           NA             NA              NA         NA
# 7  5745    1112017 31122017 M1/5170L    2017-11-01    01:44:59                       6           NA             NA              NA         NA
# 8  5745    1112017 31122017 M1/5170L    2017-11-01    01:59:59                       7           NA             NA              NA         NA
# 9  5745    1112017 31122017 M1/5170L    2017-11-01    02:14:59                       8           NA             NA              NA         NA
#10  5745    1112017 31122017 M1/5170L    2017-11-01    02:29:59                       9           NA             NA              NA         NA
# … with 11,222 more rows, and 16 more variables: `0 - 10 mph` <int>, `11 - 15 mph` <int>, `16 - 20 mph` <int>, `21 - 25 mph` <int>, `26 - 30
#   mph` <int>, `31 - 35 mph` <int>, `36 - 40 mph` <int>, `41 - 45 mph` <int>, `46 - 50 mph` <int>, `51 - 55 mph` <int>, `56 - 60 mph` <int>, `61 -
#   70 mph` <int>, `71 - 80 mph` <int>, `80+ mph` <int>, `Avg mph` <int>, `Total Volume` <int>
库(purrr)
图书馆(dplyr)
道路交通报告%>%
变异(数据=映射(数据,~.x%>%
变异所有(如字符))%>%
unnest(数据)%%>%
type.convert
#键入.convert(,as.is=TRUE)#以避免获取因子列
#A tibble:11232x27
#站点开始日期结束日期站点名称报告日期时间段En时间间隔0-520 cm 521-660 cm 661-1160 cm 1160+cm`
#                                                                                       
#15741112017 31122017 M1/5170L 2017-11-01 00:14:59不适用
#2574511112017 311220017 M1/5170L 2017-11-01 00:29:59不适用
#35741112017 311220017 M1/5170L 2017-11-01 00:44:59不知道
#45741112017 31122017 M1/5170L 2017-11-01 00:59:59 3不适用
#57451112017 31122017 M1/5170L 2017-11-01 01:14:59 4不适用
#6157451112017 31122017 M1/5170L 2017-11-01 01:29:59不适用
#7 57451112017 31122017 M1/5170L 2017-11-01 01:44:59不适用
#85741112017 311220017 M1/5170L 2017-11-01 01:59:59 7不适用
#9 57451112017 31122017 M1/5170L 2017-11-01 02:14:59不适用
#105741112017 311220017 M1/5170L 2017-11-01 02:29:59不适用
#…增加11222行,增加16个变量:'0-10英里/小时'、'11-15英里/小时'、'16-20英里/小时'、'21-25英里/小时'、'26-30英里/小时'
#时速`、`31-35英里`、`36-40英里`、`41-45英里`、`46-50英里`、`51-55英里`、`56-60英里`、`61英里-
#70英里/小时、'71-80英里/小时、'80英里/小时以上、'Avg mph'、'Total Volume'

或者使用
type\u convert
from
readr

Cool@akrun。我不知道
类型。转换
。我会将您的帖子调整为
type.convert(as.is=TRUE)
以删除因子。
library(purrr)
library(dplyr)
road_reports %>% 
    mutate(data = map(data, ~ .x %>% 
              mutate_all(as.character))) %>% 
    unnest(data) %>%
    type.convert
    # type.convert(., as.is = TRUE) # to avoid getting factor columns
# A tibble: 11,232 x 27
#   sites start_date end_date `Site Name` `Report Date` `Time Period En… `Time Interval` `0 - 520 cm` `521 - 660 cm` `661 - 1160 cm` `1160+ cm`
#   <int>      <int>    <int> <fct>       <fct>         <fct>                      <int>        <int>          <int>           <int>      <int>
# 1  5745    1112017 31122017 M1/5170L    2017-11-01    00:14:59                       0           NA             NA              NA         NA
# 2  5745    1112017 31122017 M1/5170L    2017-11-01    00:29:59                       1           NA             NA              NA         NA
# 3  5745    1112017 31122017 M1/5170L    2017-11-01    00:44:59                       2           NA             NA              NA         NA
# 4  5745    1112017 31122017 M1/5170L    2017-11-01    00:59:59                       3           NA             NA              NA         NA
# 5  5745    1112017 31122017 M1/5170L    2017-11-01    01:14:59                       4           NA             NA              NA         NA
# 6  5745    1112017 31122017 M1/5170L    2017-11-01    01:29:59                       5           NA             NA              NA         NA
# 7  5745    1112017 31122017 M1/5170L    2017-11-01    01:44:59                       6           NA             NA              NA         NA
# 8  5745    1112017 31122017 M1/5170L    2017-11-01    01:59:59                       7           NA             NA              NA         NA
# 9  5745    1112017 31122017 M1/5170L    2017-11-01    02:14:59                       8           NA             NA              NA         NA
#10  5745    1112017 31122017 M1/5170L    2017-11-01    02:29:59                       9           NA             NA              NA         NA
# … with 11,222 more rows, and 16 more variables: `0 - 10 mph` <int>, `11 - 15 mph` <int>, `16 - 20 mph` <int>, `21 - 25 mph` <int>, `26 - 30
#   mph` <int>, `31 - 35 mph` <int>, `36 - 40 mph` <int>, `41 - 45 mph` <int>, `46 - 50 mph` <int>, `51 - 55 mph` <int>, `56 - 60 mph` <int>, `61 -
#   70 mph` <int>, `71 - 80 mph` <int>, `80+ mph` <int>, `Avg mph` <int>, `Total Volume` <int>