首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将tibble列中的嵌套列表提取到其他列

将tibble列中的嵌套列表提取到其他列
EN

Stack Overflow用户
提问于 2020-10-24 14:14:17
回答 1查看 77关注 0票数 0

我正在使用ggmap包,我已经创建了一个两列的tibble,一个地址和第二列中的地理编码(地址)的输出,这是一个嵌套列表。我想将这个嵌套列表中的信息提取到单独的列中。

tibble看起来像这样,

代码语言:javascript
复制
# A tibble: 6 x 2
Origin                               geo         
<chr>                                <list>      
1 Major Arterial Road(South-East), De~ <named list~
2 Murari Pukur Govt Sponsored Higher ~ <named list~
3 Running Lab, RA Puram Trustpakkam M~ <named list~
4 Ravindra Bharathi, Saifabad Khairat~ <named list~
5 11/7, Adarsha Pally, Netaji Nagar, ~ <named list~
6 Hotel Eagle executive, Pimpri-Chinc~ <named list~

嵌套列表包含ggmap::geocode()的输出,如下所示(dput output)

代码语言:javascript
复制
list(results = list(list(address_components = list(list(long_name = "417", 
    short_name = "417", types = list("street_number")), list(
    long_name = "North Rawhide", short_name = "N Rawhide", types = list(
        "route")), list(long_name = "Mid-america Industrial Park", 
    short_name = "Mid-america Industrial Park", types = list(
        "neighborhood", "political")), list(long_name = "Olathe", 
    short_name = "Olathe", types = list("locality", "political")), 
    list(long_name = "Johnson County", short_name = "Johnson County", 
        types = list("administrative_area_level_2", "political")), 
    list(long_name = "Kansas", short_name = "KS", types = list(
        "administrative_area_level_1", "political")), list(long_name = "United States", 
        short_name = "US", types = list("country", "political")), 
    list(long_name = "66061", short_name = "66061", types = list(
        "postal_code")), list(long_name = "3657", short_name = "3657", 
        types = list("postal_code_suffix"))), formatted_address = "417 N Rawhide, Olathe, KS 66061, USA", 
    geometry = list(location = list(lat = 38.8861111, lng = -94.7913889), 
        location_type = "ROOFTOP", viewport = list(northeast = list(
            lat = 38.8874600802915, lng = -94.7900399197085), 
            southwest = list(lat = 38.8847621197085, lng = -94.7927378802915))), 
    place_id = "ChIJRVUJdB--wIcRHkCUc1X_XBk", plus_code = list(
        compound_code = "V6P5+CC Olathe, KS, USA", global_code = "86C7V6P5+CC"), 
    types = list("clothing_store", "establishment", "point_of_interest", 
        "shoe_store", "store"))), status = "OK")

我的目标是在这个tibble中添加额外的列,比如lat、long、country、country等。

我试着编写我自己的函数,但它们似乎不起作用

我尝试的是

代码语言:javascript
复制
get_lat <- function(geo) {
    return(geo$geometry$location$lat) 
}

MWE <- tibble(geo = lst) #(where lst is my dput output)
mutate(MWE, lat = map(geo, get_lat))

tibble头部的DPUT

代码语言:javascript
复制
structure(list(Origin = c("Major Arterial Road(South-East), Deshbandhu Nagar, New Town, West Bengal, India", 
"Murari Pukur Govt Sponsored Higher Secondary School, Ultadanga Main Road Ultadanga Kolkata West Bengal India", 
"Running Lab, RA Puram Trustpakkam Mandaveli Chennai Tamil Nadu India", 
"Ravindra Bharathi, Saifabad Khairatabad Hyderabad Telangana India", 
"11/7, Adarsha Pally, Netaji Nagar, Kolkata, West Bengal 700092, India", 
"Hotel Eagle executive, Pimpri-Chinchwad Maharashtra India"), 
    geo = list(list(results = list(list(address_components = list(
        list(long_name = "Major Arterial Road(South-East)", short_name = "Major Arterial Road(South-East)", 
            types = list("route")), list(long_name = "Deshbandhu Nagar", 
            short_name = "Deshbandhu Nagar", types = list("political", 
                "sublocality", "sublocality_level_2")), list(
            long_name = "New Town", short_name = "New Town", 
            types = list("locality", "political")), list(long_name = "North 24 Parganas", 
            short_name = "North 24 Parganas", types = list("administrative_area_level_2", 
                "political")), list(long_name = "West Bengal", 
            short_name = "WB", types = list("administrative_area_level_1", 
                "political")), list(long_name = "India", short_name = "IN", 
            types = list("country", "political"))), formatted_address = "Major Arterial Road(South-East), Deshbandhu Nagar, New Town, West Bengal, India", 
        geometry = list(bounds = list(northeast = list(lat = 22.6121767, 
            lng = 88.4750972), southwest = list(lat = 22.5835264, 
            lng = 88.4662183)), location = list(lat = 22.5977493, 
            lng = 88.4718048), location_type = "GEOMETRIC_CENTER", 
            viewport = list(northeast = list(lat = 22.6121767, 
                lng = 88.4750972), southwest = list(lat = 22.5835264, 
                lng = 88.4662183))), place_id = "Ek9NYWpvciBBcnRlcmlhbCBSb2FkKFNvdXRoLUVhc3QpLCBEZXNoYmFuZGh1IE5hZ2FyLCBOZXcgVG93biwgV2VzdCBCZW5nYWwsIEluZGlhIi4qLAoUChIJRdaq9U91AjoR7gvrdkF1FOASFAoSCb05qolEdQI6ETkXaZ56UBJJ", 
        types = list("route"))), status = "OK"), list(results = list(
        list(address_components = list(list(long_name = "Ultadanga Main Road", 
            short_name = "Ultadanga Main Rd", types = list("route")), 
            list(long_name = "Block-9", short_name = "Block-9", 
                types = list("neighborhood", "political")), list(
                long_name = "Murari Pukur", short_name = "Murari Pukur", 
                types = list("political", "sublocality", "sublocality_level_2")), 
            list(long_name = "Ultadanga", short_name = "Ultadanga", 
                types = list("political", "sublocality", "sublocality_level_1")), 
            list(long_name = "Kolkata", short_name = "Kolkata", 
                types = list("locality", "political")), list(
                long_name = "Kolkata", short_name = "Kolkata", 
                types = list("administrative_area_level_2", "political")), 
            list(long_name = "West Bengal", short_name = "WB", 
                types = list("administrative_area_level_1", "political")), 
            list(long_name = "India", short_name = "IN", types = list(
                "country", "political")), list(long_name = "700067", 
                short_name = "700067", types = list("postal_code"))), 
            formatted_address = "107 & 108/4, Ultadanga Main Rd, Block-9, Murari Pukur, Ultadanga, Kolkata, West Bengal 700067, India", 
            geometry = list(location = list(lat = 22.5923114, 
                lng = 88.3879988), location_type = "GEOMETRIC_CENTER", 
                viewport = list(northeast = list(lat = 22.5936603802915, 
                  lng = 88.3893477802915), southwest = list(lat = 22.5909624197085, 
                  lng = 88.3866498197085))), place_id = "ChIJRTqclBN2AjoRvFKeihU8Y6U", 
            plus_code = list(compound_code = "H9RQ+W5 Kolkata, West Bengal, India", 
                global_code = "7MJCH9RQ+W5"), types = list("establishment", 
                "point_of_interest", "school"))), status = "OK"), 
        list(results = list(list(address_components = list(list(
            long_name = "Chennai", short_name = "Chennai", types = list(
                "locality", "political")), list(long_name = "RA Puram", 
            short_name = "RA Puram", types = list("political", 
                "sublocality", "sublocality_level_3")), list(
            long_name = "Trustpakkam", short_name = "Trustpakkam", 
            types = list("political", "sublocality", "sublocality_level_2")), 
            list(long_name = "Mandaveli", short_name = "Mandaveli", 
                types = list("political", "sublocality", "sublocality_level_1")), 
            list(long_name = "Chennai", short_name = "Chennai", 
                types = list("administrative_area_level_2", "political")), 
            list(long_name = "Tamil Nadu", short_name = "TN", 
                types = list("administrative_area_level_1", "political")), 
            list(long_name = "India", short_name = "IN", types = list(
                "country", "political")), list(long_name = "600028", 
                short_name = "600028", types = list("postal_code"))), 
            formatted_address = "No 1, GF, Sai Durbar, 44/45, 2nd Main Road, Near Billroth Hospital, RA Puram, Trustpakkam, Mandaveli, RA Puram, Trustpakkam, Mandaveli, Chennai, Tamil Nadu 600028, India", 
            geometry = list(location = list(lat = 13.0272203, 
                lng = 80.2568369), location_type = "GEOMETRIC_CENTER", 
                viewport = list(northeast = list(lat = 13.0285692802915, 
                  lng = 80.2581858802915), southwest = list(lat = 13.0258713197085, 
                  lng = 80.2554879197085))), place_id = "ChIJv0BOUshnUjoRZ4HdVwXArxA", 
            plus_code = list(compound_code = "27G4+VP Chennai, Tamil Nadu, India", 
                global_code = "7M5227G4+VP"), types = list("clothing_store", 
                "establishment", "point_of_interest", "store"))), 
            status = "OK"), list(results = list(list(address_components = list(
            list(long_name = "State Assembly", short_name = "State Assembly", 
                types = list("landmark")), list(long_name = "Lakdikapul Road", 
                short_name = "Lakdikapul Rd", types = list("route")), 
            list(long_name = "Saifabad", short_name = "Saifabad", 
                types = list("political", "sublocality", "sublocality_level_2")), 
            list(long_name = "Lakdikapul", short_name = "Lakdikapul", 
                types = list("political", "sublocality", "sublocality_level_1")), 
            list(long_name = "Hyderabad", short_name = "Hyderabad", 
                types = list("locality", "political")), list(
                long_name = "Hyderabad", short_name = "Hyderabad", 
                types = list("administrative_area_level_2", "political")), 
            list(long_name = "Telangana", short_name = "Telangana", 
                types = list("administrative_area_level_1", "political")), 
            list(long_name = "India", short_name = "IN", types = list(
                "country", "political")), list(long_name = "500004", 
                short_name = "500004", types = list("postal_code"))), 
            formatted_address = "Lakdikapul Rd, near State Assembly, Saifabad, Lakdikapul, Hyderabad, Telangana 500004, India", 
            geometry = list(location = list(lat = 17.4033074, 
                lng = 78.467095), location_type = "GEOMETRIC_CENTER", 
                viewport = list(northeast = list(lat = 17.4046563802915, 
                  lng = 78.4684439802915), southwest = list(lat = 17.4019584197085, 
                  lng = 78.4657460197085))), place_id = "ChIJ_33ft7mRMjoRMDstgG7X4N8", 
            plus_code = list(compound_code = "CF38+8R Hyderabad, Telangana, India", 
                global_code = "7J9WCF38+8R"), types = list("establishment", 
                "point_of_interest"))), status = "OK"), list(
            results = list(list(address_components = list(list(
                long_name = "11", short_name = "11", types = list(
                  "subpremise")), list(long_name = "7", short_name = "7", 
                types = list("premise")), list(long_name = "Adarsha Pally", 
                short_name = "Adarsha Pally", types = list("political", 
                  "sublocality", "sublocality_level_2")), list(
                long_name = "Netaji Nagar", short_name = "Netaji Nagar", 
                types = list("political", "sublocality", "sublocality_level_1")), 
                list(long_name = "Kolkata", short_name = "Kolkata", 
                  types = list("locality", "political")), list(
                  long_name = "Kolkata", short_name = "Kolkata", 
                  types = list("administrative_area_level_2", 
                    "political")), list(long_name = "West Bengal", 
                  short_name = "WB", types = list("administrative_area_level_1", 
                    "political")), list(long_name = "India", 
                  short_name = "IN", types = list("country", 
                    "political")), list(long_name = "700092", 
                  short_name = "700092", types = list("postal_code"))), 
                formatted_address = "11, 7, Adarsha Pally, Netaji Nagar, Kolkata, West Bengal 700092, India", 
                geometry = list(location = list(lat = 22.4814396, 
                  lng = 88.3604102), location_type = "ROOFTOP", 
                  viewport = list(northeast = list(lat = 22.4827885802915, 
                    lng = 88.3617591802915), southwest = list(
                    lat = 22.4800906197085, lng = 88.3590612197085))), 
                place_id = "EkYxMSwgNywgQWRhcnNoYSBQYWxseSwgTmV0YWppIE5hZ2FyLCBLb2xrYXRhLCBXZXN0IEJlbmdhbCA3MDAwOTIsIEluZGlhIh4aHAoWChQKEgkPR5DY4nACOhG1kq12opRwUxICMTE", 
                types = list("subpremise")), list(address_components = list(
                list(long_name = "11/7", short_name = "11/7", 
                  types = list("premise")), list(long_name = "Adarsha Pally", 
                  short_name = "Adarsha Pally", types = list(
                    "political", "sublocality", "sublocality_level_2")), 
                list(long_name = "Netaji Nagar", short_name = "Netaji Nagar", 
                  types = list("political", "sublocality", "sublocality_level_1")), 
                list(long_name = "Kolkata", short_name = "Kolkata", 
                  types = list("locality", "political")), list(
                  long_name = "Kolkata", short_name = "Kolkata", 
                  types = list("administrative_area_level_2", 
                    "political")), list(long_name = "West Bengal", 
                  short_name = "WB", types = list("administrative_area_level_1", 
                    "political")), list(long_name = "India", 
                  short_name = "IN", types = list("country", 
                    "political")), list(long_name = "700092", 
                  short_name = "700092", types = list("postal_code"))), 
                formatted_address = "11/7, Adarsha Pally, Netaji Nagar, Kolkata, West Bengal 700092, India", 
                geometry = list(location = list(lat = 22.480674, 
                  lng = 88.363836), location_type = "ROOFTOP", 
                  viewport = list(northeast = list(lat = 22.4820229802915, 
                    lng = 88.3651849802915), southwest = list(
                    lat = 22.4793250197085, lng = 88.3624870197085))), 
                place_id = "ChIJ5fMASx1xAjoRymUCIwGCqYw", plus_code = list(
                  compound_code = "F9J7+7G Kolkata, West Bengal, India", 
                  global_code = "7MJCF9J7+7G"), types = list(
                  "street_address"))), status = "OK"), list(results = list(
            list(address_components = list(list(long_name = "251", 
                short_name = "251", types = list("street_number")), 
                list(long_name = "Pimpri-Chinchwad Link Road", 
                  short_name = "Pimpri-Chinchwad Link Rd", types = list(
                    "route")), list(long_name = "Gawade Nagar", 
                  short_name = "Gawade Nagar", types = list("political", 
                    "sublocality", "sublocality_level_2")), list(
                  long_name = "Chinchwad", short_name = "Chinchwad", 
                  types = list("political", "sublocality", "sublocality_level_1")), 
                list(long_name = "Pimpri-Chinchwad", short_name = "Pimpri-Chinchwad", 
                  types = list("locality", "political")), list(
                  long_name = "Pune", short_name = "Pune", types = list(
                    "administrative_area_level_2", "political")), 
                list(long_name = "Maharashtra", short_name = "MH", 
                  types = list("administrative_area_level_1", 
                    "political")), list(long_name = "India", 
                  short_name = "IN", types = list("country", 
                    "political")), list(long_name = "411033", 
                  short_name = "411033", types = list("postal_code"))), 
                formatted_address = "Survey No, 251, Pimpri-Chinchwad Link Rd, Gawade Nagar, Chinchwad, Pimpri-Chinchwad, Maharashtra 411033, India", 
                geometry = list(location = list(lat = 18.6301787, 
                  lng = 73.7938112), location_type = "ROOFTOP", 
                  viewport = list(northeast = list(lat = 18.6315276802915, 
                    lng = 73.7951601802915), southwest = list(
                    lat = 18.6288297197085, lng = 73.7924622197085))), 
                place_id = "ChIJbRla9GO5wjsR5gGzf6KGoJk", plus_code = list(
                  compound_code = "JQJV+3G Pimpri-Chinchwad, Maharashtra, India", 
                  global_code = "7JCMJQJV+3G"), types = list(
                  "establishment", "lodging", "point_of_interest"))), 
            status = "OK"))), row.names = c(NA, -6L), class = c("tbl_df", 
"tbl", "data.frame"))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-24 18:31:16

例如,您可以使用包purrr。像这样的东西应该是有效的:

代码语言:javascript
复制
library(tidyverse)

tbl %>% mutate(lat = map_dbl(geo, get_lat)) 

输出

代码语言:javascript
复制
# A tibble: 6 x 3
  Origin                                                                                                       geo                lat
  <chr>                                                                                                        <list>           <dbl>
1 Major Arterial Road(South-East), Deshbandhu Nagar, New Town, West Bengal, India                              <named list [2]>  22.6
2 Murari Pukur Govt Sponsored Higher Secondary School, Ultadanga Main Road Ultadanga Kolkata West Bengal India <named list [2]>  22.6
3 Running Lab, RA Puram Trustpakkam Mandaveli Chennai Tamil Nadu India                                         <named list [2]>  13.0
4 Ravindra Bharathi, Saifabad Khairatabad Hyderabad Telangana India                                            <named list [2]>  17.4
5 11/7, Adarsha Pally, Netaji Nagar, Kolkata, West Bengal 700092, India                                        <named list [2]>  22.5
6 Hotel Eagle executive, Pimpri-Chinchwad Maharashtra India                                                    <named list [2]>  18.6
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64510557

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档