我有一个数据框,如果lat为NA,那么我希望For循环再次查找地理编码并将其替换为数据框中的值。
Country Continent long lat
Netherlands Europe NA NA
Norway Europe 8.468946 60.47202
Poland Europe 19.145136 51.91944
library(ggmap)
geocode("CountryName") will give the lat and long result.
如何以编程方式分配R以运行for循环 - 对于数据帧中的每一行并检查NA,如果NA则获取地理编码并将其替换为数据帧df。
请帮我解决这个问题。感谢。
答案 0 :(得分:1)
我的回答与Gregor的评论基本相同,但是有一个有效的例子。
在R:
中发出下一个命令后library(ggmap) # for using command 'geocode'
# setting up a sample dataframe with missing longitudes and latitudes data
df <- data.frame(Country = c('Netherland', 'Norway', 'Poland'),
Continent = rep('Europe', 3),
long = c(NA, 8.468946, 19.145136),
lat = c(NA, 60.47202, 51.91944))
# print the dataframe
df
您将获得下一个输出:
Country Continent long lat
1 Netherland Europe NA NA
2 Norway Europe 8.468946 60.47202
3 Poland Europe 19.145136 51.91944
要修复缺失的经度和纬度,请发出下一个命令:
# looking for rows where longitude is missing
missing.long <- is.na(df$long)
# getting the missing longitude for the above TRUE marked rows
df[missing.long, 'long'] <- geocode(as.character(df$Country[missing.long]))$lon
# looking for rows where latitude is missing
missing.lat <- is.na(df$lat)
# getting the missing latitude for the above TRUE marked rows
df[missing.lat, 'lat'] <- geocode(as.character(df$Country[missing.lat]))$lat
# print the dataframe
df
你会得到输出:
Country Continent long lat
1 Netherland Europe 5.291266 52.13263
2 Norway Europe 8.468946 60.47202
3 Poland Europe 19.145136 51.91944
当然,如果经度和纬度数据总是一起丢失,您就不必使用单独的missing.long
和missing.lat
向量。