我正在使用一个函数(mutate_geocode),该函数输出两列数据,经度和纬度。由于google api花费大量资金,因此我只希望它在我没有经度和纬度的区域上运行地址解析功能。
library(dplyr)
problem <- tibble(location = c("Atlanta United States", "Paris France", "Rome Italy"),
lon = c(NA, 2.35, 12.49),
lat = c(NA, 48.86, 41.90))
我希望它最终看起来像这样(再次,无需在已有的区域上运行地理编码:
library(dplyr)
solution <- tibble(location = c("Atlanta United States", "Paris France", "Rome Italy"),
lon = c(-84.39, 2.35, 12.49),
lat = c(33.75, 48.86, 41.90))
要到达那里,我尝试使用if_else,但似乎无法正常工作。
library(ggmap)
library(dplyr)
solution <- if_else(is.na(problem$lon) & is.na(problem$lat), true = mutate_geocode(problem$location), false = c(problem$lon & problem$lat))
我愿意接受解决方案,感谢您的宝贵时间!如果您还可以解释您的代码,那将来也会对我有帮助。谢谢!
答案 0 :(得分:1)
像base::ifelse
,dplyr::if_else
一样,结果必须与测试参数的形状相同。您的测试只是一个单列的向量,因此结果必须是一个单列的向量。由于结果的形状不同,因此if_else
是完成这项工作的不好工具。
只需对丢失的数据子集运行mutate_geocode
:
is_missing = is.na(problem$lon) & is.na(problem$lat) ## maybe you want `|` instead?
problem[is_missing , c("lon", "lat")] = mutate_geocode(problem[is_missing , "location"])