#Geocomputation with R课后练习题,第三章
setwd("F:\\shunyi")
library(pacman)
p_load(sf,tmap,spData,tidyverse,dplyr,units,magrittr)
#加载数据
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"))
#9、2010、2015年各州人口密度
us_states%<>%mutate(popdes10=total_pop_10/as.numeric(AREA),
popdes15=total_pop_15/as.numeric(AREA))
#10、每个州在2010-2015年间的变化率
us_states%<>%mutate(changepop=(popdes15-popdes10)/total_pop_10*100)
#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)