R中的多个列的if_else

时间:2019-06-05 20:35:38

标签: r if-statement dplyr conditional-statements ggmap

我正在使用一个函数(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))

我愿意接受解决方案,感谢您的宝贵时间!如果您还可以解释您的代码,那将来也会对我有帮助。谢谢!

1 个答案:

答案 0 :(得分:1)

base::ifelsedplyr::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"])