的背景
我有一个问题,可能有多种解决方案,但我相信有一个尚未发现的优雅解决方案利用 purrr。
示例代码
我有一个如下的大数据框,为此我在下面提供了一个示例:
library(tibble)
library(ggmap)
library(purrr)
library(dplyr)
# Define Example Data
df <- frame_data(
~Street, ~City, ~State, ~Zip, ~lon, ~lat,
"226 W 46th St", "New York", "New York", 10036, -73.9867, 40.75902,
"5th Ave", "New York", "New York", 10022, NA, NA,
"75 Broadway", "New York", "New York", 10006, -74.01205, 40.70814,
"350 5th Ave", "New York", "New York", 10118, -73.98566, 40.74871,
"20 Sagamore Hill Rd", "Oyster Bay", "New York", 11771, NA, NA,
"45 Rockefeller Plaza", "New York", "New York", 10111, -73.97771, 40.75915
)
挑战
我想对lon
和lat
列当前所在的所有位置进行地理标记NA
。有很多方法可以解决这个问题,其中一种如下所示:
# Safe Code is Great Code
safe_geocode <- safely(geocode)
# Identify Data to be Geotagged by Absence of lon and lat
data_to_be_geotagged <- df %>% filter(is.na(lon) | is.na(lat))
# GeoTag Addresses of Missing Data Points
fullAddress <- paste(data_to_be_geotagged$Street,
data_to_be_geotagged$City,
data_to_be_geotagged$State,
data_to_be_geotagged$Zip,
sep = ", ")
fullAddress %>%
map(safe_geocode) %>%
map("result") %>%
plyr::ldply()
问题
虽然我可以使上述工作,甚至将新识别的坐标lon
和lat
坐标重新放入原始数据框中,但整个方案感觉很脏。我相信有一种优雅的方法可以利用管道和 purrr 来遍历数据框,并根据 和 的缺失有条件地对位置进行地理lon
标记lat
。
我遇到了许多兔子洞,包括在构建完整地址(以及和)purrr::pmap
时尝试并行遍历多个列。尽管如此,我在构建任何可以称为优雅解决方案的东西方面都做得不够好。rowwise()
by_row()
提供的任何见解将不胜感激。