将嵌套的tbl_df转换为tibble或数据帧

时间:2017-11-05 00:38:21

标签: r tidyverse rnoaa

我在' rnoaa'中运行了一项功能。将5个最近的气象站找到包含巢箱位置的数据框的包。这会产生嵌套的tbl_df,即每个嵌套盒ID的tibble。我想将tbl_df转换为保留相应嵌套盒ID的tibble或数据框,但我不知道该怎么做。这是我的代码和数据示例。

导入数据:

 nests<-structure(list(id = structure(1:5, .Label = c("29", "36", "39", 
    "41", "42", "43", "45", "47", "48", "50", "51", "52", "53", "54", 
    "55", "57", "58", "59", "60", "61", "62", "64", "65", "67", "69", 
    "70", "71", "72", "73", "75", "77", "78", "79", "80", "81", "82", 
    "84", "87", "88", "89", "90", "91", "92", "93", "95", "97", "99", 
    "100", "102", "106", "108", "109", "110", "118", "123", "124", 
    "125", "126", "127", "129", "130", "131", "133", "134", "136", 
    "138", "140", "141", "144", "147", "149", "151", "155", "157", 
    "158", "160", "161", "162", "163", "165", "167", "168", "169", 
    "172", "174", "175", "177", "178", "179", "180", "181", "182", 
    "186", "189", "190", "193", "195", "202", "205", "207", "208", 
    "215", "217", "218", "225", "229", "230", "236", "240", "241", 
    "243", "244", "246", "247", "248", "249", "251", "253", "254", 
    "255", "257", "258", "259", "260", "261", "262", "263", "269", 
    "270", "276", "292", "294", "295", "296", "297", "298", "300", 
    "301", "302", "303", "305", "306", "307", "308", "309", "311", 
    "316", "317", "318", "322", "323", "324", "326", "329", "330", 
    "331", "332", "333", "334", "335", "336", "337", "338", "339", 
    "342", "345", "346", "350", "351", "353", "358", "362", "363", 
    "365", "366", "368", "369", "372", "379", "380", "381", "382", 
    "384", "386", "387", "388", "390", "391", "392", "393", "394", 
    "395", "396", "397", "398", "400", "401", "403", "404", "406", 
    "410", "411", "414", "415", "416", "418", "420", "424", "425", 
    "426", "428", "429", "430", "432", "433", "435", "436", "440", 
    "441", "442", "445", "446", "447", "448", "449", "450", "451", 
    "453", "458", "459", "461", "462", "463", "464", "465", "466", 
    "469", "470", "471", "478", "479", "488", "490", "497", "503", 
    "504", "506", "507", "508", "509", "512", "513", "514", "515", 
    "516", "517", "518", "519", "520", "521", "527", "528", "529", 
    "530", "531", "534", "540", "542", "545", "552", "553", "554", 
    "556", "558", "561", "562", "563", "565", "566", "568", "569", 
    "570", "571", "572", "573", "574", "575", "576", "577", "578", 
    "580", "583", "584", "585", "591", "592", "595", "606", "608", 
    "610", "612", "614", "615", "616", "617", "620", "621", "627", 
    "628", "634", "635", "636", "637", "638", "639", "643", "647", 
    "648", "651", "652", "653", "654", "656", "661", "662", "663", 
    "664", "665", "667", "669", "670", "673", "674", "676", "677", 
    "679", "680", "681", "684", "685", "690", "693", "694", "695", 
    "706", "708", "716", "717", "719", "720", "728", "757", "759", 
    "761", "777", "798", "801", "803", "818", "838", "839", "855", 
    "856", "864", "865", "867", "868", "880", "890", "899", "901", 
    "914", "915", "924", "985", "998", "999", "1002", "1003", "1004", 
    "1019", "1020", "1021", "1022", "1058", "1059", "1116", "1139", 
    "1146", "1164", "1169", "1170", "1178", "1183", "1186", "1188", 
    "1193", "1211", "1233", "1235", "1236", "1237", "1251", "1263", 
    "1285", "1288", "1289", "1294", "1296", "1298", "1299", "1300", 
    "1302", "1303", "1305", "1307", "1310", "1311", "1328", "1331", 
    "1332", "1333", "1334", "1335", "1455", "1456", "1459", "1461", 
    "1462", "1463", "1466", "1467", "1469", "1473", "1474", "1475", 
    "1476", "1478", "1479", "1480", "1482", "1485", "1487", "1503", 
    "1506", "1520", "1534", "1564", "1572", "1575", "1582", "1587", 
    "1588", "1592", "1593", "1594", "1597", "1602", "1607", "1611", 
    "1612", "1613", "1615", "1616", "1617", "1619", "1633", "1656", 
    "1657", "1658", "1660", "1663", "1664", "1667", "1668", "1669", 
    "1676", "1677", "1679", "1691", "1704", "1716", "1734", "1735", 
    "1736", "1766", "1771", "1772", "1773", "1775", "1777", "1783", 
    "1801", "1814", "1818", "1834", "1835", "1836", "1837", "1838", 
    "1840", "1843", "1845", "1846", "1847", "1850", "1852", "1856", 
    "1857", "1858", "1859", "1860", "1882", "1883", "1890", "1891", 
    "1897", "1899", "1901", "1902", "1909", "1910", "1912", "1914", 
    "1923", "1926", "1928", "1929", "1935", "1941", "1956", "1958", 
    "1960", "1968", "1991", "1994", "1998", "2002", "2010", "2012", 
    "2016", "2019", "2024", "2026", "2029", "2030", "2032", "2033", 
    "2034", "2035", "2036", "2039", "2042", "2046", "2049", "2053", 
    "2055", "2056", "2057", "2059", "2093", "2101", "2103", "2121", 
    "2134", "2146", "2147", "2152", "2184", "2185", "2186", "2187", 
    "2188", "2190", "2197", "2201", "2239", "2240", "2249", "2250", 
    "2291", "2313", "2322", "2347", "2351", "2353", "2354", "2355", 
    "2360", "2361", "2369", "2370", "2372", "2373", "2374", "2375", 
    "2376", "2402", "2426", "2427", "2445", "2447", "2449", "2459", 
    "2460", "2462", "2467", "2468", "2469", "2471", "2484", "2485", 
    "2486", "2488", "2490", "2494", "2496", "2517", "2613", "2623", 
    "2624", "2625", "2641", "2696", "2697", "2709", "2711", "2712", 
    "2713", "2714", "2997", "3000", "3004"), class = "factor"), latitude = c(43.29515222, 
    44.02074565, 44.44193, 44.146666, 43.98897), longitude = c(-89.29077182, 
    -92.04753707, -121.40635, -121.347223, -121.18639)), .Names = c("id", 
    "latitude", "longitude"), row.names = c(NA, -5L), class = c("tbl_df", 
    "tbl", "data.frame"))

这会抓住5个最近的气象站并产生一个tbl_df:

nearest_station<-meteo_nearby_stations(lat_lon_df = nests, station_data = station_data,
                      limit = 5, var = c("TAVG"),
                      year_min = 2011, year_max = 2016)
nearest_station

最后,我使用do.call生成单个数据框:

ns <- do.call(rbind, lapply(nearest_station, data.frame, stringsAsFactors=FALSE))
head(ns)

结果数据表显示气象站ID旁边的巢箱ID(在id下),第一列确实只包含气象站ID:

 id                     name latitude longitude  distance
29.1 USW00014837     MADISON DANE RGNL AP  43.1406  -89.3453  17.74438
29.2 USR0000WDDG     DODGEVILLE WISCONSIN  43.1000  -90.0000  61.44939
29.3 USW00014839    MILWAUKEE MITCHELL AP  42.9550  -87.9044 118.69939
29.4 USW00094822 ROCKFORD GTR ROCKFORD AP  42.1928  -89.0931 123.63416
29.5 USW00094908          DUBUQUE RGNL AP  42.3978  -90.7036 152.38709
36.1 USW00014925        ROCHESTER INTL AP  43.9042  -92.4917  37.83807

ns[,1]

USW00014837

有没有办法将巢箱信息保存在气象站数据框中?

1 个答案:

答案 0 :(得分:0)

(抱歉迟到的回复)

如果您使用dplyr::bind_rows之类的内容,则可以执行以下操作:

dplyr::bind_rows(nearest_station, .id = "nest_box_id")

获取

#> # A tibble: 25 x 6
#>    nest_box_id id          name                        latitude longitude distance
#>    <chr>       <chr>       <chr>                          <dbl>     <dbl>    <dbl>
#>    29          USW00014837 MADISON DANE RGNL AP            43.1     -89.3     17.7
#>    29          USR0000WDDG DODGEVILLE WISCONSIN            43.1     -90.0     61.4
#>    29          USW00014839 MILWAUKEE MITCHELL AP           43.0     -87.9    119.
#>    29          USW00094822 ROCKFORD GTR ROCKFORD AP        42.2     -89.1    124.
#>    29          USW00094908 DUBUQUE RGNL AP                 42.4     -90.7    152.
#>    36          USW00014925 ROCHESTER INTL AP               43.9     -92.5     37.8
#>    36          USW00014920 LA CROSSE MUNI AP               43.9     -91.3     65.5
#>    36          USR0000WBRF BLACK RIVER FALLS WISCONSIN     44.3     -90.8    102.
#>    36          USR0000WAUG AUGUSTA WISCONSIN               44.7     -91.1    105.
#>    36          USW00014922 MINNEAPOLIS/ST PAUL AP          44.9     -93.2    134.
#> # ... with 15 more rows