r - if_else 跨 R 中的多个列
问题描述
我正在使用一个函数(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))
我愿意接受解决方案并感谢您的时间!如果您还可以解释您的代码,那将来也会对我有所帮助。谢谢!
解决方案
像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"])
推荐阅读
- node.js - 使用 graphql 和 apollo-server 在解析器中获取会话
- javascript - 我如何得到
Vue.js 中选项更改事件的元素 id (BootstrapVue) - angular - Angular:如何在父组件中注入具体类
- angular - 根据角度 6 中的条件隐藏相同的行值?
- spring-boot - 从 Spring Boot 运行时 application.properties 动态填充 .js 属性的最佳方法?
- angular - 找不到“AppModule”的 NgModule 元数据中的错误。当 npm 运行时
- jsp - 在 Struts 2 中从 jsp 传递值时出错
- c - C 返回大数混淆
- r - 使用 lubridate 和 ggplot 在条形图中的工作日顺序
- javascript - 在数组数组中返回数组名称