1. 程式人生 > 其它 >Geocomputation with R課後習題答案(第三章)

Geocomputation with R課後習題答案(第三章)

#Geocomputation with R課後練習題,第三章
setwd("F:\\shunyi")
library(pacman)
p_load(sf,tmap,spData,tidyverse,dplyr,units)

#載入資料
data(us_states)
data(us_states_df)

#1、建立一個新物件us_states_name,該物件僅包含us_states物件Name列
#us_states_name為字串向量,沒有空間屬性
us_states_name<-us_states$NAME
# us_states_name<-st_sf(us_states,geometry=us_states$geometry)
#運用管道符建立保留了空間屬性
us_states_name<-us_states%>%select("NAME")

#2、從us_states物件中選取人口列,嘗試用三種方法
#採用中括號提取
pop1<-us_states[,c("total_pop_10","total_pop_15")]
#採用select()函式提取
pop2<-select(us_states,c(total_pop_10,total_pop_15))
#採用輔助函式contains()和starts_with()
pop3<-us_states%>%select(contains("pop"))
pop4<-us_states%>%select(starts_with("total"))

#3.1找到中西部地區
midwest<-us_states%>%filter(REGION=="Midwest")
#3.2找到擁有25萬平方公里以下和2015年人口超過5百萬的西部地區
#設定單位
a<-set_units(250000,km^2)
west<-us_states%>%
  filter(REGION=="West")%>%
  filter(AREA<a&total_pop_15>5000000)
#3.3面積大於15萬平方公里或2015年總人口超過7000000的南方
b<-set_units(150000,km^2)
south<-us_states%>%
  filter(REGION=="South")%>%
  filter(AREA>b | total_pop_15>7000000)

#4、2015年總人口,最大值,最小值
tpop<-us_states%>%
  st_drop_geometry()%>%
  select(total_pop_15)%>%
  summarise(pop=sum(.),max=max(.),min=min(.))

#5、每個地區有多少州
NAMEnum<-us_states%>%
  st_drop_geometry()%>%
#  select(NAME,REGION)%>%
  group_by(REGION)%>%
  summarise(NAMEm=n())

#6、2015年各地區的最低、最高和總人口分別是?
regpop<-us_states%>%
  st_drop_geometry()%>%
#  select(total_pop_15,REGION)%>%
  group_by(REGION)%>%
  summarise(min=min(total_pop_15),max=max(total_pop_15),tot=sum(total_pop_15))

#7、將us_states_df加入到us_states中
us_states_stats<-us_states%>%left_join(us_states_df,by=c(NAME="state"))

#8、找到us_states_df比us_states多的兩列
duo<-anti_join(us_states_df,us_states,by=c("state"="NAME"))

#11、將列名改為小寫
names(us_states)<-tolower(names(us_states))

#12、建立新物件us_states_sel,只有兩個變數median_income_15和geometry
us_states_sel<-us_states_stats%>%select(Income=median_income_15,geometry)