删除R中的NA值,而不会破坏数据框

时间:2015-10-12 13:08:20

标签: r kml na

我正在尝试绘制挪威的熊群,但我正在使用我的脚本遇到一些问题。 在尝试转换为kml时,我不断收到通知,告知我的数据包含NA值。 我尝试过na.omit,但这只会因某种原因破坏我的数据框架。我在网上搜索并尝试了所有我遇到过的事情,但都没有成功。

那里有谁可以帮助我?

脚本有些文字是挪威文,只是看过去

library("dismo")
library("maps")
library("raster") 
library("rgdal") 
library("XML")

gbif('Ursus', 'arctos', download= FALSE) #sjekker datasettet for antall registreringer av U.arctos
bjorn <-gbif('Ursus', 'arctos', download= TRUE) #laster ned datasettet fra GBIF

summary(bjorn) #dataene gaar fra 1833 til 2015, med median i 1957 og gjennomsnitt i 1953 (alts?? flest m??linger p?? 50-tallet)
str(bjorn) #7860 registreringer

latbjorn<-(bjorn$lat)
sum(is.na(bjorn$lat)) #4906 registreringer har NA-verdi paa latitude og longitude

longbjorn <-(bjorn$lon)
sum(is.na(bjorn$lon))

land<-table(bjorn$country)
land

norge<- subset(bjorn, country == "Norway", (!is.na(lat+lon)))
summary(norge) #111 verdier registrert
sum(is.na(norge$lat))
sum(is.na(norge$lon)) #35 NA-verdier for latitude og longitude

norgelon<-data.frame(na.omit(norge$lon))
norgelat<-data.frame(na.omit(norge$lat))
par(mfrow=c(1,2))
hist(norge$lon, xlab="Lengdegrad", ylab="Antall registrerte Ursus arctos", main="Antall bj??rn registrert per lengdegrad", col= "red")
hist(norge$lat, xlab="Breddegrad", ylab="Antall registrerte Ursus arctos", main="Antall bj??rn registrert per breddegrad", col= "light blue")

norge2<-merge(norgelat, norgelon)
norge2
summary(norge2)

par(mfrow=c(1,1))
map("world")
points(bjorn$lon,bjorn$lat,col="red", pch= 4)
points(norge$lon,norge$lat,col="green", pch= 4)

library("raster")
norgeplot<-getData('GADM',country='NOR',level=0)
plot(norgeplot)
points(norge$lon,norge$lat,col="red",pch=4)
norgeplot2<-getData('GADM',country='NOR',level=1)
plot(norgeplot2)
class(norgeplot)

nor.alt<-getData('alt',country='NOR',mask=T)
class(nor.alt)
plot(nor.alt)
points(norge$lon,norge$lat,col="red",pch=4)


z<-extract(nor.alt,norge[,c("lon","lat")])
summary(z)
par(mar=c(5,6,4,2))
hist(z,col="orange",xlab="Meter over havet",ylab="Frekvens",main="Fordeling av individer p?? moh.")

library(rgdal)
GEO.WGS84<-CRS("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs")
norge.sp<-SpatialPointsDataFrame(norge[,c("lon","lat")],norge,proj4string=GEO.WGS84)
writeOGR(norge.sp,"my.pet.kml","Ursus arctos",driver="KML")

2 个答案:

答案 0 :(得分:1)

在列上单独使用na.omit将忽略NA个值。但请考虑一下这里发生的事情:

lat lon
  1  NA
 NA   2

结果norge2会是什么样的?

lat lon
  1   2

......不是我们想要的。相反,请使用complete.cases

norge2 = complete.cases(norge)

这将省略任何列为NA的所有行。

答案 1 :(得分:1)

这是你的脚本,修复和简化(使它变得更加教学)。

library("dismo")
library("maps")
library("rgdal")

bjorn <-gbif('Ursus', 'arctos', download= TRUE)

# This is how you can remove records with missing coordinates 
bjorn <- bjorn[!is.na(bjorn$lat) & !is.na(bjorn$lon), ]

dim(bjorn)

norge <- subset(bjorn, country == "Norway")

par(mfrow=c(1,2))
hist(norge$lon, xlab="Lengdegrad", ylab="Antall registrerte Ursus arctos", main="Antall bjorn registrert per lengdegrad", col= "red")
hist(norge$lat, xlab="Breddegrad", ylab="Antall registrerte Ursus arctos", main="Antall bjorn registrert per breddegrad", col= "light blue")

par(mfrow=c(1,1))
map("world")
points(bjorn$lon,bjorn$lat,col="red", pch= 4)
points(norge$lon,norge$lat,col="green", pch= 4)

norgeplot <- getData('GADM',country='NOR', level=0)
norgeplot2<-getData('GADM', country='NOR', level=1)

plot(norgeplot)
points(norge$lon,norge$lat,col="red",pch=4)

nor.alt<-getData('alt',country='NOR')
plot(nor.alt)
plot(norgeplot2, add=TRUE)
points(norge$lon,norge$lat, col="red", pch=20)

z <- extract(nor.alt, norge[,c("lon","lat")])
par(mar=c(5,6,4,2))
hist(z,col="orange",xlab="Meter over havet",ylab="Frekvens",main="Fordeling av individer p?? moh.")

library(rgdal)
GEO.WGS84 <- CRS("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs")
norge.sp <- SpatialPointsDataFrame(norge[,c("lon","lat")],norge,proj4string=GEO.WGS84)
writeOGR(norge.sp, "my.pet.kml", "Ursus arctos", driver="KML")