在不损坏数据帧的情况下删除R中的NA值



我正在尝试绘制挪威熊的数量,但是我的脚本遇到了一些问题。在尝试转换为kml时,我不断收到通知,我的数据包含NA值。我试过了。省略,但这只会由于某种原因破坏我的数据帧。我在网上找遍了所有能找到的方法,但都没有成功。

有谁能帮我吗?

Script部分文本为挪威语,请忽略

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")

在列上单独使用na.omit将忽略NA值。但是考虑一下这里发生了什么:

lat lon
  1  NA
 NA   2

结果norge2看起来像什么?

lat lon
  1   2
这不是我们想要的。相反,使用complete.cases:
norge2 = complete.cases(norge)

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

这是你的脚本,修复和简化(这样它变得更有指导性)。

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")

最新更新