R 将嵌套列表转换为数据帧似乎会删除一些条目
我正在尝试将嵌套列表(视频详细信息)转换为数据帧。嵌套列表中的大多数信息不应该在最终的数据框中,而应该是“标记”(理想情况下是“id”)。嵌套列表有252个元素,每个元素的结构如下:R 将嵌套列表转换为数据帧似乎会删除一些条目,r,list,dataframe,nested,rbind,R,List,Dataframe,Nested,Rbind,我正在尝试将嵌套列表(视频详细信息)转换为数据帧。嵌套列表中的大多数信息不应该在最终的数据框中,而应该是“标记”(理想情况下是“id”)。嵌套列表有252个元素,每个元素的结构如下: $ :List of 4 ..$ kind : chr "youtube#videoListResponse" ..$ etag : chr "\"Fznwjl6JEQdo1MGvHOGaz_YanRU/wjb97SA5L1u9pjKF_Wa4GYuJoks\"" ..$
$ :List of 4
..$ kind : chr "youtube#videoListResponse"
..$ etag : chr "\"Fznwjl6JEQdo1MGvHOGaz_YanRU/wjb97SA5L1u9pjKF_Wa4GYuJoks\""
..$ pageInfo:List of 2
.. ..$ totalResults : int 1
.. ..$ resultsPerPage: int 1
..$ items :List of 1
.. ..$ :List of 4
.. .. ..$ kind : chr "youtube#video"
.. .. ..$ etag : chr "\"Fznwjl6JEQdo1MGvHOGaz_YanRU/fJEMmhh4c330M-HX-dZXcMUN_R0\""
.. .. ..$ id : chr "Dod4hirL4IU"
.. .. ..$ snippet:List of 10
.. .. .. ..$ publishedAt : chr "2019-11-02T13:00:04.000Z"
.. .. .. ..$ channelId : chr "UCa92M881KJO0FqaOUb4xAqg"
.. .. .. ..$ title : chr "Making Hydrogen from Water (Ft: The DIY Science Guy)"
.. .. .. ..$ description : chr "In which JB attempts to make an electrolytic cell for making hydrogen gas after being inspired by The DIY Scien"| __truncated__
.. .. .. ..$ thumbnails :List of 5
.. .. .. .. ..$ default :List of 3
.. .. .. .. .. ..$ url : chr "https://i.ytimg.com/vi/Dod4hirL4IU/default.jpg"
.. .. .. .. .. ..$ width : int 120
.. .. .. .. .. ..$ height: int 90
.. .. .. .. ..$ medium :List of 3
.. .. .. .. .. ..$ url : chr "https://i.ytimg.com/vi/Dod4hirL4IU/mqdefault.jpg"
.. .. .. .. .. ..$ width : int 320
.. .. .. .. .. ..$ height: int 180
.. .. .. .. ..$ high :List of 3
.. .. .. .. .. ..$ url : chr "https://i.ytimg.com/vi/Dod4hirL4IU/hqdefault.jpg"
.. .. .. .. .. ..$ width : int 480
.. .. .. .. .. ..$ height: int 360
.. .. .. .. ..$ standard:List of 3
.. .. .. .. .. ..$ url : chr "https://i.ytimg.com/vi/Dod4hirL4IU/sddefault.jpg"
.. .. .. .. .. ..$ width : int 640
.. .. .. .. .. ..$ height: int 480
.. .. .. .. ..$ maxres :List of 3
.. .. .. .. .. ..$ url : chr "https://i.ytimg.com/vi/Dod4hirL4IU/maxresdefault.jpg"
.. .. .. .. .. ..$ width : int 1280
.. .. .. .. .. ..$ height: int 720
.. .. .. ..$ channelTitle : chr "Good and Basic"
.. .. .. ..$ tags :List of 8
.. .. .. .. ..$ : chr "DIY"
.. .. .. .. ..$ : chr "diyscienceguy"
.. .. .. .. ..$ : chr "diy science guy"
.. .. .. .. ..$ : chr "hydrogen electrolysis"
.. .. .. .. ..$ : chr "water splitting"
.. .. .. .. ..$ : chr "hydrogen generator"
.. .. .. .. ..$ : chr "Good and basic"
.. .. .. .. ..$ : chr "splitting molecules"
.. .. .. ..$ categoryId : chr "22"
.. .. .. ..$ liveBroadcastContent: chr "none"
.. .. .. ..$ localized :List of 2
.. .. .. .. ..$ title : chr "Making Hydrogen from Water (Ft: The DIY Science Guy)"
.. .. .. .. ..$ description: chr "In which JB attempts to make an electrolytic cell for making hydrogen gas after being inspired by The DIY Scien"| __truncated__
最终输出应该是一个包含252行的数据帧(视频标签的252个元素各一行)和一列,用于所有252个元素中的每个唯一“标签”条目。以下是我到目前为止输入的内容:
just_tags <- map(map(map(video_details_t, "items") %>%
flatten(), "snippet"), "tags")
我假设这些对输出不重要,因为我认为它们只是将“标记”元素转换为字符而不是因子
如果转换是删除重复的行,是否有办法保留这些行,例如,用原始列表中的“id”元素标识每一行?252个元素中的每个元素正好有一个“id”元素,并且它是唯一的,因此可以使用它来描绘数据帧中252个最终输出行中的每一行
非常感谢你的帮助,如果我能说得更清楚,请告诉我 据我所知,阿克斯曼给出了正确的解决方案
just_tags <- map(map(map(video_details_t, "items") %>%
flatten(), "snippet"), "tags")
just_标签%
展平(),“片段”),“标记”)
需要在“map()”函数的每个阶段使用“.default=NA”参数进行修改,如下所示:
just_tags <- map(map(map(video_details_t, "items", .default = NA) %>%
flatten(), "snippet", .default = NA), "tags", .default = NA)
just_标签%
展平(),“snippet”,.default=NA),“tags”,.default=NA)
在这之后,跑步
df<- rbind_all(lapply(just_tags, data.frame))
dfIt是使用bind\u rows
而不是rbind\u all
的警告消息,或者您可以使用map\u dfr
map\u dfr(仅标记、数据.frame)
第二个警告是因子
列,如果存在不相等的因子
级别,则会导致强制到字符
类。如果没有可复制的示例,很难帮助解决具体问题,请参阅“可能替换df”,我怀疑这是在删除重复行,但可能是你们252个元素中的一些没有这个标签。在这种情况下,我猜你的map(map(map
将返回NULL
。合并结果后,您将没有行。请参阅?map
的示例,特别是。default
参数,查看如何将这些NULL
值改为NA
。@Axeman就是这样。我以为它们都有“标记”元素,但它们没有。在实现您关于“.default”参数的建议后,生成的data.frame比它应该包含的列多了一列,但我假设这是NA条目(即使我找不到它们)。无论如何,这是一个可接受的精度水平。感谢您的帮助,以及可复制示例指南的链接。(作为旁注,“map_dfr”给出了一个错误,但这并不重要,因为我得到了我想要的东西。)很高兴它得到解决。再次,请考虑将您的<代码> RBDunyALL < /COD>代码直接替换为<代码> BIDYLROWS/<代码>,或者如注释中所示的<代码> MAPYDFR变型。<代码> RbDujyALL 被禁止(正如警告告诉您的)。在将来,请提供一个可复制的例子!
just_tags <- map(map(map(video_details_t, "items", .default = NA) %>%
flatten(), "snippet", .default = NA), "tags", .default = NA)
df<- rbind_all(lapply(just_tags, data.frame))