第一二节课
1.定类
#字符串记录月份有两个问题
#1. 12个月 输入错误不会有任何反应
#2. 对月份的排序不是按照月份的先后进行
**m1 <- c("三月","四月","一月","六月")
m2 <- c("三月","四月","一月","六月","月份")**
#排序按 字母顺序
sort(m1)
#用因子来解决问题 ,创建因子 前 必须先创建 有效的一个列表:
**month_levels <- c("一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月")
y1 <- factor(m1,levels = month_levels)**
#不在有效集合内的所有值都会自动转换为 NA:
**y2 <- factor(m2,levels = month_levels)
y2**
2.字段重命名
library(tidyverse)
library(readr)
gdp <- read_delim("F:/r数据/第一节线下课/GDP3.csv","\t", escape_double = FALSE, trim_ws = TRUE)
#字符串拼接 str_C()
str_c("a","b")
#生成一组向量
str_c("y",2020:2000)
tmp <- str_c("y",2020:2001)
#输出gdp列表的横轴 字段名称
colnames(gdp)
#改变向量中第二个字符串的值
colnames(gdp)[2] <- "y2019"
#改变向量中 第二到第二十个 字符串的值
colnames(gdp)[2:21] <- tmp
gdp
#返回表中的行数和列数
dim(gdp)
#返回表中的列数
dim(gdp)[2]
#2-列数的数据
colnames(gdp)[2:dim(gdp)[2]] <- tmp
3.选择列子集
library(tidyverse)
library(readr)
library(dplyr)
gdp <- read_delim("D:/r数据/第一节线下课/gdp4.csv","\t", escape_double = FALSE, trim_ws = TRUE)
#gdp[9:15]
tmp <- c("山东省","江苏省","浙江省","福建省","山西省","上海市")
#gdp <- filter(地区=="山东省"|地区=="河南省")
gdp <- filter(gdp,地区 %in% tmp)
#select
4.str字符方法
library(tidyverse)
library(readr)
library(dplyr)
x <- c("白日依山尽","黄河入海流","欲穷千里目","更上一层楼")
str_length(x)
str_c(x[1],",",x[2])
str_count("白 白 白 黑 黑","白")
str_detect("白白白黑黑","白")
str_detect("白白白黑黑","红")
str_locate("1222342222256","([2])+")
M<-str_split("白 白 白 黑 黑"," ")
str_sub("123456789评论数",str_locate("00010000评论数","1"))
#floor向上取整
loc <- floor((str_length(x)/2)+1)
str_sub(x,loc,loc)
第三节课
1.mutate()创建一个新变量
library(tidyverse)
library(readr)
gdp1 <- read_delim("G:/r数据/第一节线下课/GDP3.csv","\t", escape_double = FALSE, trim_ws = TRUE)
##mutate()创建一个新变量
gdp2<- gdp1 %>%
mutate(GDP_tmp=(`2019年`-`2000年`)/`2000年`*100)%>%
select(地区,`2019年`,`2000年`,GDP_tmp)%>%
arrange(desc(GDP_tmp))
gdp2
##相当于switch
gdp3<- gdp1 %>%
mutate(
类型=case_when(
str_detect(地区,"市") ~ "直辖市",
str_detect(地区,"区") ~ "自治区",
TRUE ~ "省份"
)
)
gdp3
gdp1 %>%
mutate(排名2018=min_rank(`2018年`))%>%
select(地区,`2018年`,排名2018)%>%
arrange(排名2018)
gdp1
gdp2
gdp3
gdp1
2.summarize()函数 将数据框折叠成一行
library(tidyverse)
library(readr)
gdp1 <- read_delim("D:/r数据/第一节线下课/GDP3.csv","\t", escape_double = FALSE, trim_ws = TRUE)
gdp1<- gdp1 %>%
mutate(
类型=case_when(
str_detect(地区,"市") ~ "直辖市",
str_detect(地区,"区") ~ "自治区",
TRUE ~ "省份"
)
)
#将上面得到的 “类型” 列 用group_by(类型) 分组 然后求 2016年的中位数 和 平均值
gdp1 %>%
group_by(类型)%>%
summarise(avg2016=mean(`2016年`),median2016 = median(`2016年`))