R数据科学(R for Data Science)

Part 2:数据处理


导入——>整理——>转换

------------------第7章 使用tibble实现简单数据框-------------------

#tibble一种简单数据框
vignette("tibble") #创建tibble
str(iris)
str(as_tibble(iris)) tibble(x=1:5,
y=1,
z=x^2+y)
#tribble(transposed tibble)转置tibble,对数据按行进行编码
tribble(~x,~y,~z,
#--/--/----
"a",2,3.6,
"b",1,8.5) #tibble与data.frame的比较
tibble(a=lubridate::now()+runif(1e3)*86400,
b=lubridate::today()+runif(1e3)*30,
c=1:1e3,
d=runif(1e3),
e=sample(letters,1e3,replace = T)) flights %>% print(n=10,width=Inf) #打印所有列
#flights %>% View() df <- tibble(x=runif(5),y=runif(5))
df$x
df[["x"]]
df[[1]] df %>% .$x #管道连用需要占位符
df %>% .[["x"]]
df %>% .[[1]] #转换
class(as.data.frame(tb))

---------------第8章 使用readr进行数据导入-------------------------------

read_csv() # ,
read_csv2() # ;
read_tsv() # \t
read_delim() # 任意分隔符
read_fwf() # 固定宽度:fwf_widths按宽度设置域,fwf_position按位置设置域
read_table() #固定宽度,空白符
read_log() #apache风格的日志文件 #csv文件是数据存储最常用的形式
read_csv("a,b,c
1,2,3
4,5,6") #提供创建行内csv文件 read_csv("test 1
test 2
x,y,z
1,2,3",skip=2) #skip跳过前两行 read_csv("#test 1
#test 2
x,y,z
1,2,3",comment="#") #跳过以#开头的行 read_csv("1,2,3\n4,5,6",col_names = F) #不将第一行视为列标题
read_csv("1,2,3\n4,5,6",col_names = c("x","y","z")) #自定义列名
read_csv("a,b,c\n1,2,.",na=".") #设定缺失值 #与基础包比较
#快;可生成tibble;易于重复 #解析向量
parse_logical(c("TRUE","FALSE","NA"))
parse_integer(c("1","2","3"))
parse_integer(c("1","2","."),na=".")
(x <- parse_integer(c("1","2","ad","3.4"))) #解析失败
problems(x) #解析失败很多时,获取完整的失败信息集合 #①数值
parse_double("1.23")
parse_double("1,23",locale=locale(decimal_mark = ",")) #分组符号只能设逗号和点?
parse_number("$1000")
parse_number("20%")
parse_number("it costs $123.45")
parse_number("$123,456,789") #②字符串
parse_character("el ni is a test")
parse_character("El Ni\xf1 is a test",locale=locale(encoding = "Latin1")) #③因子
parse_factor(c("apple","banana")) #④日期和时间
parse_datetime("2010-01-11T2010")
parse_datetime("20100111") parse_date("2010-10-10")
parse_date("01/02/15","%m/%d/%y") parse_time("01:10 am")
parse_time("20:10:01") #解析文件
#readr使用一种启发式过程来确定每一列的类型:先读取1000行,然后再用某种启发式算法来确定每列的类型
#parse_guess()猜测来解析列
#会有一些问题:如NA过多、前1000行较特殊等
#建议总是提供col_types参数
#PS:读个文件,太他妈麻烦了,放弃不看! #写入文件
write_csv()
write_tsv()
write_excel_csv()
write_rds()

---------------第9章 使用dplyr处理关系数据--------------------------

#即处理多个数据集:合并连接、筛选连接、集合操作
library(nycflights13)
flights
airlines
airports
planes
weather #键:连接每对数据集的变量;主键:该数据集观测的唯一标识;外键:另一数据集观测的唯一标识
#识别主键并验证
planes %>% count(tailnum) %>% filter(n>1) #检查没有重复 #有些数据没有明确的主键:变量组合也不能明确标识
flights %>% count(year,month,day,flight) %>% filter(n>1) #代理键:没有主键情况下创建的主键,mutate和row_number函数
#关系:一对一,一对多,多对一,多对多 #合并连接:
flights2 <- flights %>% select(year:day,hour,origin,dest,tailnum,carrier)
flights2
flights2 %>% select(-origin,-dest) %>%
left_join(airlines,by="carrier")
#等同于
flights2 %>% select(-origin,-dest) %>%
mutate(name=airlines$name[match(carrier,airlines$carrier)]) #合并方式:
inner_join(x,y) #merge(x,y)
left_join(x,y) #merge(x,y,all.x=T)
right_join(x,y) #merge(x,y,all.y=T)
full_join(x,y) #merge(x,y,all.x=T,all.y=T) #指定键(列)
left_join(flights2,weather) #默认by=NULL,连接两个表中所有变量
left_join(flights2,planes,by="tailnum") #指定公共变量
left_join(flights2,airports,c("dest"="faa")) #匹配两个表的dest列和faa列 #筛选连接
semi_join(x,y) #保留和y表匹配的所有x表观测值
anti_join(x,y) #丢弃................... top_dest <- flights %>% count(dest,sort = T) %>% head(10)
top_dest #最受欢迎的top10目的地
flights %>% filter(dest %in% top_dest$dest)
#等于
flights %>% semi_join(top_dest) flights %>% anti_join(planes,by="tailnum") %>% count(tailnum,sort = T) #集合操作:整行比较
intersect(x,y)
union(x,y)
setdiff(x,y)#x有,y没有

---------------第10章 使用stringr处理字符串---------------------

x <- c("\"","\\")
x
writeLines(x) #查看字符串原始内容 #字符串长度
str_length(c("a","r for data science",NA)) #字符串组合
str_c("x","y")
str_c("x","y",sep = ",") x <- c("abc",NA)
str_c("|-",x,"-|")
str_c("|-",str_replace_na(x),"-|")
#向量化
str_c("pre-",c("a","b","c"),"-suffix") #字符串取子集
x <- c("Apple","Banana","Pear")
str_sub(x,1,3)
str_sub(x,-3,-1)
str_sub("a",1,5) str_to_upper(x)
str_to_lower(x) #排序
str_sort(x)
str_order(x) #正则表达式匹配
str_view(x,"an")
str_view(x,".a.") #匹配换行符外的任意字符 #转义
dot <- "\\."
writeLines(dot)
str_view(c("abc","a.c","bef"),"a\\.c") x <- "a\\b"
writeLines(x)
str_view(x,"\\\\") #锚点
x <- c("apple","apple pie","banana","pear")
str_view(x,"^a")
str_view(x,"a$")
str_view(x,"apple")
str_view(x,"^apple$")
str_view(x,"\bapple\b") #\b匹配单词边界 error? #字符类
# \d:任意数字
# \s:任意空白字符(空格、制表符、换行符)
# [abc]:a或b或c
# [^abc]:除a/b/c外的任意字符 str_view(c("grey","gray"),"gr(e|a)y") #重复
x <- "this is a test: MDCCCCCCLXXXXIIIV"
str_view(x,"CC?") #? 0或1次
str_view(x,"CC+") #+ 1或多次
str_view(x,"CC*") #* 0或多次
str_view(x,"C[LX]+") str_view(x,"C{2}") #2次
str_view(x,"C{2,}") #至少2次
str_view(x,"C{2,4}") #2-4次
#默认贪婪匹配 #懒惰模式
str_view(x,"C{2,3}?")
str_view(x,"C[LX]+?") #分组与回溯引用
fruit
str_view(fruit,"(..)\\1",match = T) #相对于创建一个复杂的正则表达式,不如创建多个简单的正则表达式 #匹配检测
x <- c("apple","banana","pear")
str_detect(x,"e") #返回逻辑值
words
sum(str_detect(words,"^t")) #统计匹配个数
mean(str_detect(words,"[aeiou]$")) #元音字母结尾的单词的比例 #取元素
words[str_detect(words,"x$")]
str_subset(words,"x$") #数据框取元素
df <- tibble(word=words,i=seq_along(word))
df
df %>% filter(str_detect(words,"x$")) #返回匹配数量
str_count(x,"a")
mean(str_count(words,"[aeiou]")) #平均数目 df %>% mutate(vowels=str_count(word,"[aeiou]"),
consonants=str_count(word,"[^aeiou]")) str_count("abababa","aba") #匹配2次,不会重叠
str_view_all("abababa","aba")
#stringr的函数都是成对的:后缀加_all的用于全部匹配,没加的单个匹配 #提取匹配内容
stringr::sentences
length(sentences)
#想要从中找出所有含有颜色的句子
colors <- c("red","orange","yellow","green","blue","purple")
color_match <- str_c(colors,collapse = "|") #以|连接
has_color <- str_subset(sentences,color_match) #匹配的句子
matches <- str_extract(has_color,color_match) #匹配的元素,每个句子只提取第一个匹配
head(matches) more <- sentences[str_count(sentences,color_match)>1]
str_view_all(more,color_match)
str_extract(more,color_match)
str_extract_all(more,color_match) #提取多个匹配元素,返回列表
str_extract_all(more,color_match,simplify = T) #返回矩阵 #分组匹配
str_match() #替换匹配内容
x <- c("apple","banana","pear")
str_replace(x,"[aeiou]","-")
str_replace_all(x,"[aeiou]","-")
#同时多个替换
x <- c("1 hours","2 cars","3 people")
str_replace_all(x,c("1"="one","2"="two","3"="three")) #拆分
sentences %>% head(5) %>% str_split(" ") #返回列表
sentences %>% head(5) %>% str_split(" ",simplify = T) #返回矩阵
sentences %>% head(5) %>% str_split(" ",n=2,simplify = T) #只拆分2段 #定位匹配内容
str_locate(x,"rs$") #其他模式
str_view(fruit,"nana") #是以下函数的简写
str_view(fruit,regex("nana"))
str_view(fruit,regex("nana",ignore_case = T)) #忽略大小写
#regex其他参数:multiline=T/F, comments=T/F, dotall=T/F
#fixed函数
#coll函数
#boundar函数 #R基础函数妙用:
apropos("replace") #在环境中搜索可用的对象,不能想起函数名时用
dir(pattern="\\.Rmd$") #列出目录下所有文件

--------------第11章 使用forcats处理因子------------

factor()
levels() forcats::gss_cat #社会调查数据
gss_cat %>% count(race) #修改因子水平顺序和值
gss_cat %>% count(partyid)
gss_cat %>% mutate(partyid=fct_recode(partyid,
"new1"="No answer",
"new2"="Other party")) %>% count(partyid) #---------------第12章 使用lubridate处理日期和时间------------------------
library(lubridate)
today()
now()
#略

最新文章

  1. git 实用操作
  2. C#--中实现邮件发送
  3. 线段树---Atlantis
  4. C# Excel写入
  5. devexpress13学习系列(一)PDFViewer(2)
  6. [转]IP动态切换脚本
  7. [转]fedora启动telnet服务
  8. Ubuntu12.04安装YouCompleteMe插件
  9. PowerDesigner 根据NAME属性自动生成表和列注释(不用写脚本)
  10. Primo Ramdisk配置教程
  11. W5300E01-ARM 交叉编译器(Cross Compiler)用户手册
  12. css实现遮罩层,父div透明,子div不透明
  13. vue项目的mode:history模式
  14. 微信小程序-制作简易豆瓣笔记
  15. HBase总结 LSM理解
  16. 山东省ACM多校联盟省赛个人训练第六场 poj 3335 D Rotating Scoreboard
  17. C#反射の反射接口
  18. 10分钟让你的代码更加pythonic
  19. PAT 1021 个位数统计 (15)(C++&Java&Python)
  20. spring定时任务配置,以及不执行的解决办法

热门文章

  1. PyCharm中目录directory与包package的区别及相关import详解
  2. Netty学习笔记(1)NIO三大组件
  3. 如何从一台OPC Server访问多个PLC
  4. 四万字32图,Kafka知识体系保姆级教程宝典
  5. 6月8日 Scrum Meeting
  6. 常用Java API:大数类
  7. Luogu 520题纪念
  8. hdu 1861 游船出租(模拟题,,水)
  9. Vue2高级原理
  10. Go语言实现APPID登录