R学习 从Tidyverse学起,入门R语言(tidyr和stringr)

tidyverse出自于R大神Hadley Wickham之手,他是Rstudio首席科学家,也是ggplot2的作者。tidyverse就是他将自己所写的包整理成了一整套数据处理的方法,包括ggplot2,dplyr,tidyr,readr,purrr,tibble,stringr, forcats。同时也出了一本《R for Data Science》,这本书里面也详细介绍了tidyverse的使用方法。

R学习往期回顾:

R学习 从Tidyverse学起,入门R语言(tibble,readr和dplyr)

R学习:字符串

R学习:环境和函数

R学习:数据框的基本操作

R学习:R for Data Science(五)

R学习:R for Data Science(四)

R学习:R for Data Science(三)

R学习:R for Data Science(二)

R学习:R for Data Science(一)

tidyverse包含日常处理数据使用的核心包

我们可以将这些包进行分类:数据导入、数据整理、数据转换、可视化、建模、编程。

上回我们学习了tibblereadrdplyr

今天我们学习tidyrstringr

参考:

https://zhuanlan.zhihu.com/p/22265154

https://www.jianshu.com/p/f58ccc1ea30b

#install.packages("tidyverse")library(tidyverse)

tidyr

在tidyr包中,有四个常用的函数,分别是:

  • gather():宽数据转换为长数据,将行聚集成列

  • spread():长数据转换为宽数据,将列展开为行

  • unite():多列合并为一列

  • separate():将一列分离为多列.

我们平常所见的数据基本上是行为基因,列为样本,或是行为基因,列是样本

而在R中的清洁数据(Tidy data)原则是 每一列代表一次观测,每一行代表一个变量

而变量不仅有数字变量,还有分类变量

在我们上面的例子中,基因的ID,样品名称以及基因的表达量都是变量,而每一个基因在每一个样品中的表达量可以成为一次观测。因此,按照Tidy data的原则,应该将上述图表中的数据整理成如下格式:

这就是我们所谓的清洁数据

我们的目的是要把上边的数据转换成下边的格式。这里要引入键的概念,用于连接每对数据表的变量称为键。键是能唯一标识观测的变量(或变量集合) 要实现转换结果,在GeneId一定的情况下,我们可以把每一个样品和其对应的基因表达量看做一个键-值对(key-value pair)。比如:在GeneID为gene1时,sample1对应的表达量是3,sample2对应的表达量是4。因此,我们在转换数据时,只需按照上述规则,并指定要转换的列即可。使用tidyr包中的gather函数即可实现转换。

gather函数用法

gather函数宽数据转换为长数据,将行聚集成列,将列聚集到键值对中。

调用公式如下

> gather(data=,key=,value=,...,na.rm=,convert=,factor_key=)# key:创建一个新的列名,原数据的旧列名成为新列名的观测值# value:再创建一个新的列名,原数据的所有旧列名的观测值成为新列名的观测值# ...:按照实际需要自行指定需要转换的列# na.rm:逻辑值,是否删除缺失值# convert:逻辑值,在key列是否进行数据类型转换# factor_key:逻辑值,若是F,则key自动转换为字符串,反之则是因子(原始level水平保持不变)

构建一个表达矩阵

test <- tibble( sample = c(1:10), gene1 = rnorm(10, 0, 1), gene2 = rnorm(10, 0, 2), gene3 = rnorm(10, 0, 4))

宽数据转换为长数据

test %>% gather("gene", "expression", -sample)#或者test %>% gather( key ="gene",value = "expression",gene1,gene2,gene3)

spread函数用法

spread()函数将长数据转为宽数据,即将列展开为行,调用公式如下

> spread(data = ,key = ,value = ,fill = ,convert = ,drop = )# key:指定转换的某列,其观测值作为转换后的列名# value:其他列的观测值分散到相对应的各个单元# fill:设定某个值,替换缺失值
test1<-test %>% gather( key ="gene",value = "expression",gene1,gene2,gene3)

长转宽

test1%>% spread(key ="gene",value = "expression")

unite函数用法

unite()函数是将数据框中多列合并为一列,调用公式如下:

> unite(data = ,col = ,... = ,sep = ,remove = )# col:指定组合为新列的名字# ...:指定数据中哪些列组合在一起# sep:组合后新列中数据之间的分隔符# remove:逻辑值,是否保留参与组合的列

构建数据

df <- expand_grid(x = c("a", NA), y = c("b", NA))df

将x和y合并

df %>% unite("z", x:y, remove = FALSE)

用+合并

df %>% unite("z", x:y, sep='+',remove = FALSE)

去掉缺失值

df %>% unite("z", x:y, na.rm = TRUE, remove = FALSE)

separate函数用法

在学习了unite()函数后,separate()函数就很好理解了,它的作用正好和unite相反,即将数据框中的某列按照分隔符拆分为多列,一般用于时间序列的拆分,调用公式如下:

> separate(data = ,col = ,into = ,sep = ,remove = ,+ convert = ,extra = ,fill = ,...)# col:待拆分的某列# into:定义拆分后新的列名# sep:分隔符# remove:逻辑值,是否删除拆分后的列

我们使用上面得到的数据集,对它进行拆分

df %>% unite("xy", x:y)
df %>% unite("xy", x:y) %>% separate(xy, c("x", "y"))
df %>% unite("z", x:y, sep='+')
df %>% unite("z", x:y, sep='+')%>% separate(z, c("x", "y"))

stringr

stringr,顾名思义,处理字符串专用包

str_c连接字符串

str_c("x", "y","z") str_c("x", "y", sep =", ")

str_length计算字符串长度

x <- c("why", "video", "cross", "extra", "deal", "authority")str_length(x) #> [1] 3 5 5 5 4 9

str_sub取子集

str_sub(x, 1, 2)#> [1] "wh" "vi" "cr" "ex" "de" "au"str_sub(x, 1, 3)#> [1] "why" "vid" "cro" "ext" "dea" "aut"

str_split函数进行拆分

fruits <- c( "apples and oranges and pears and bananas", "pineapples and mangos and guavas")
str_split(fruits, " and ")

默认返回的是列表

可以使用unlist()

unlist(str_split(fruits, " and "))

使用simplify = TRUE返回矩阵

str_split(fruits, " and ", simplify = TRUE)

使用 n= 可以限制拆分个数

str_split(fruits, " and ", n = 3)str_split(fruits, " and ", n = 2)

使用str_split_fixed也可以返回矩阵

str_split_fixed(fruits, " and ", 3)str_split_fixed(fruits, " and ", 4)

str_order(),str_sort()对字符向量排序

## 返回排序后的索引> str_order(x, decreasing = FALSE, na_last = TRUE, locale = "", ...)## 返回排序后的实际值> str_sort(x, decreasing = FALSE, na_last = TRUE, locale = "", ....)# decreasing:排序方式,默认为升序# na_last:是否将缺失值置于末尾,默认为TRUE
str_order(letters)str_sort(letters)

排序法则,默认是locale = "en"

str_order(letters, locale = "en")str_sort(letters, locale = "en")str_order(letters, locale = "haw")str_sort(letters, locale = "haw")

str_replace字符串替换

str_replace(string, pattern, replacement)str_replace_all(string, pattern, replacement)#string:需要处理的字符向量#pattern:指定匹配模#replacement:指定新的字符串用于替换匹配的模式#str_replace与str_replace_all的区别在于前者只替换一次匹配的对象,而后者可以替换所有匹配的对象
fruits <- c("one apple", "two pears", "three bananas")str_replace(fruits, "[aeiou]", "-")str_replace_all(fruits, "[aeiou]", "-")str_replace_all(fruits, "[aeiou]", toupper)str_replace_all(fruits, "b", NA_character_)
str_replace(fruits, "[aeiou]", c("1", "2", "3"))str_replace(fruits, c("a", "e", "i"), "-")

还有其他一些函数的用法,详见下图

(0)

相关推荐

  • stringr-----str_replace_na

    主页:https://cran.r-project.org/web/packages/stringr/index.html #安装stringr包> install.packages('stri ...

  • stringr-----str_c() paste()

    主页:https://cran.r-project.org/web/packages/stringr/index.html #安装stringr包 > install.packages('str ...

  • stringr包中的重要函数

    stringr包中的重要函数 函数 功能说明 R Base中对应函数 使用正则表达式的函数 str_extract() 提取首个匹配模式的字符 regmatches() str_extract_all ...

  • 字符串处理stringr包在微生物生态的应用基础

    使用stringr处理字符串 正则表达式(regular expression,regexp)是处理字符串的核心步骤.正则表达式的用处非常大,字符串通常包含的是非结构化或半结构化数据,正则表达式可以用 ...

  • stringr-----str_conv

    主页:https://cran.r-project.org/web/packages/stringr/index.html #安装stringr包> install.packages('stri ...

  • R学习 从Tidyverse学起,入门R语言(tibble,readr和dplyr)

    R学习往期回顾: R学习:字符串 R学习:环境和函数 R学习:数据框的基本操作 R学习:R for Data Science(五) R学习:R for Data Science(四) R学习:R fo ...

  • R学习 从Tidyverse学起,入门R语言dplyr合并数据

    R学习往期回顾: R学习 流程控制 if,else,ifelse R学习 从Tidyverse学起,入门R语言(tidyr和stringr) R学习 从Tidyverse学起,入门R语言(tibble ...

  • 跟着Nature Genetics 学画图:R语言ggplot2画箱线图(boxplot)展示D s...

    简介:R语言统计与绘图公众号目前致力于分享医学统计与R绘图知识,手把手教你使用R语言绘制基线特征表.KM生存曲线.森林图.ROC曲线等.每天一篇精彩R语言推文教程,手把手带你入门R语言绘图. 今天推文 ...

  • 【生信菜鸟经】如何系统入门R语言

    写在前面 R语言不仅在生物信息数据处理中发挥着重要作用,也是其它主流数据处理人士的首选工具.现在非常多自学生物信息学的小伙伴必须学的就是R,所以写一个R的系统性入门指导是非常有必要的.我作为老一辈的生 ...

  • 生信分析人员如何系统入门R(2019更新版)

    五年前作为一个初出茅庐的菜鸟生信工程师苦于没有专业交流社群,遂自建了生信菜鸟团QQ群和博客,一点一滴积累了数万人气,进而和若干圈内好友组建了生信技能树联盟,三年前的直播生物信息学编程活动细节还历历在目 ...

  • 自行入门R语言的故事(一波三折)

    真情实感流露最是动人! 亲爱的读者你是第几次接触生物信息学才掌握的呢? 下面是NGS交流群积极参与者受邀投稿 第一部分 入门生物信息的错误示范 第一次接触生信技能树,又欢又喜,竟然还有视频,在B站,全 ...

  • 【组队学习】【28期】R语言数据科学

    R语言数据科学 论坛版块: http://datawhale.club/c/team-learning/36-category/36 开源内容: https://github.com/datawhal ...

  • 地理五诀:学地理入门法,如何学习风水?李双林(13)

    主讲:李双林 内容简述:各位朋友大家好,我叫李双林.今天我们来学习学地理入门法,原文大家读一下就可以了,我今天讲是按照我的经验来和大家来讲.让大家知道我是怎么学的,然后大家也可这样去学,可以少走很多弯 ...

  • 还觉得学PLC难?看完这份学习指南,PLC轻松入门~

    同时小七为大家整理了一份PLC基本指令,了解和熟悉PLC常用的逻辑指令和具体应用方法十分重要,学会这些,才可以让你轻松入门学PLC!