如何用R语言在数据中提取指定列数据,并且形成一个新的数据表
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用R语言在数据中提取指定列数据,并且形成一个新的数据表相关的知识,希望对你有一定的参考价值。
1、分析数据表:通过浏览“入库明细”表,我们可能看到入库明细表中,作为提取记录的条件零件号在A列。需要提取的记录,入库日期在H列、入库单号在O列、最后生产批号在L列、入库前库存数在Q列。为DC000496ZL的记录有5条(截图中的4条是指上面有4条)。
2、列出提取条件及项目:在sheet1中,将A列放置提取条件(即零件号)。在B、C、D、E列分别写上提取项目名称:入库日期、入库单号、最后生产批号、入库前库存数。
3、写公式:在最后入库日期项目下B2中输入公式:=MAX((入库明细!$A$2:$A$26=$A2)*(入库明细!$H$2:$H$26)),这是一个数组公式,请用三键确认(ctrl+shift+enter)。
搜索
免费自学excel教程全套
excel另一列数据提取
自动抓取数据excel表
表格技巧大全
excel100个常用技巧
新手怎么做财务报表 参考技术A 例如R中有个数据nutrient,我只选取fat、iron列:
data.nutrient<-nutrient[,c("fat","iron")]本回答被提问者采纳
答果子问R语言如何用正则表达式提取特定的字符串
这个帖子是为了果子的一个提问
R语言能不能实现匹配括号里面的内容, 但是不包括括号
这个问题来自于他的一篇帖子, 里面提取字符串的代码不够简洁。
果子在原帖里面引用我的一句话,”正则表达式是我们认识这个世界的哲学”.既然我说了这句话,那么我就得贯彻我的哲学理念,在R里面用正则表达式把数据给提取了。
首先在https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GPL4381把对应的数据给下载了
然后用data.table
的fread
进行高效智能的读取数据
GPL4381 <- data.table::fread("GPL4381-4306.txt")
正则表达式的核心在于观察数据,提取模式,这也就是我说”正则表达式是我们认识这个世界的哲学”的原因,因为我们就是通过不断观察世界研究规律指导生活。
从上图中你发现了什么,是不是都是”xxxx(基因名),xxx”这种情况。
于是我们就可以通过R语言的regexpr
提取上面基因名的位置信息了
pattern <- ".*\\((?<ID>[A-Za-z0-9]*)\\),.*"
result <- regexpr(pattern= pattern, text = GPL4381$GB_DEFINITION, perl=TRUE)
仔细观察下我的写的模式识别,pattern <- ".*\\((?<ID>[A-Za-z0-9]*)\\),.*"
, 你会发现我用到一个你未必见过的模式,(?<>)
,这是Perl 的正则表示系统里的模式,所以必须用perl=TRUE
才能被R解读。它的作用就是把括号里面的模式单独分组。
regexpr
会返回匹配的内容的起始位置,匹配长度。如果匹配, 位置为”-1”
start <- attr(result,"capture.start")
length <- attr(result,"capture.length")
name <- attr(result,"capture.name")
之后,我们可以用substr
根据位置信息进行提取。
geneID <- ifelse(start > 0,
substr(GPL4381$GB_DEFINITION, start[,name],start[,name] + length[,name]-1),NA)
最终你查看geneID的前10个的时候,你会发现就是你想要的
head(geneID,n=10)
当然如果你用stringr
, 那代码其实更加简洁一些
res <- stringr::str_match(string = GPL4381$GB_DEFINITION, pattern = pattern)
geneID <- res[,2]
head(geneID)
说下核心知识点:
regexpr
可以返回匹配的起始位置和匹配长度,返回-1表示没有匹配(?<组名>匹配模式)
: 对匹配内容进行分组, 在perl=TRUE
下使用。
题外话
R语言处理字符并非强项,当然有人激进地认为R甚至还不算是一门编程语言,所以如果要处理字符,更好的建议是用其他编程语言,如Perl, Python. 但是如果你只能用R语言的话,那么这里有几条建议
- 学习正则表达式。正则表达式(regular expression) 本质上是用一组符号来描述你的目标字符串, 但是由于各种原因,出现了许多流派。在使用正则表达式之前,你要明确你能用哪些元字符。不过还是推荐你看 https://r4ds.had.co.nz/strings.html 学stringr
- 最后一条,马上给我去看 https://r4ds.had.co.nz/strings.html
还有,如果你怕自己一下子背不住那么多元字符,那么你可以 点开这个链接, https://github.com/rstudio/cheatsheets/blob/master/strings.pdf 下载PDF进行打印,每天看一遍。
以上是关于如何用R语言在数据中提取指定列数据,并且形成一个新的数据表的主要内容,如果未能解决你的问题,请参考以下文章
如何用python读取csv文件,并把csv文件的第3,4列形成一个列表在python 中显示。如图中的两列数据