如果Na然后用另一个值替换该值 - R(地理编码)

时间:2018-01-11 19:42:12

标签: r

我有一个数据框,如果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。

请帮我解决这个问题。感谢。

1 个答案:

答案 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.longmissing.lat向量。