首页
学习
活动
专区
圈层
工具
发布

R语言数据分析利器data.table包 —— 数据框结构处理精讲

将一个R对象转化为data.table,R可以时矢量,列表,data.frame等,keep.rownames决定是否保留行名或者列表名,默认FALSE,如果TRUE,将行名存在"rn"行中,keep.rownames...by]    i 决定显示的行,可以是整型,可以是字符,可以是表达式,j 是对数据框进行求值,决定显示的列,by对数据进行指定分组,除了by ,也可以添加其它的一系列参数: keyby,with,nomatch..., by=x][order(x)] #和上面一样,采取data.table的链接符合表达式 DT[v>1, sum(y), by=v] #对v列进行分组后,取各组中v>1的行出来,各组分别对定义的行中的...函数画图,对于每个x的分组画一张图 DT[, m:=mean(v), by=x] #对DT按x列分组,直接在DT上再添加一列m,m的内容是mean(v),直接修改并且不输出到屏幕上 DT[, m:=mean...(y=max(y)), lapply(.SD, min)), by=x, .SDcols=y:v] #对DT取y:v之间的列,按x分组,输出max(y),对y到v之间的列每列求最小值输出。

7.6K20

R语言︱数据集分组、筛选(plit – apply – combine模式、dplyr、data.table)

R语言︱数据集分组 大型数据集通常是高度结构化的,结构使得我们可以按不同的方式分组,有时候我们需要关注单个组的数据片断,有时需要聚合不同组内的信息,并相互比较。...##按照已有的类别数据,分类 g分组 ##例2:对矩阵分组(按列) m分组适用,在进行双字段联合分组时其结果为二维矩阵,用户还需要进行复杂的处理才行,比如 tapply(orders$AMOUNT, orders[,c("SELLERID","CLIENT...##对于数据框 x是对象,subset是保留元素或者行列的逻辑表达式,对于缺失值用NA代替。 Select 是选取的范围,应小于x。...(参考来源:R高效数据处理包dplyr和data.table,你选哪个?) ?

21.9K32
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    data.table包使用应该注意的一些细节

    还有就算后续改变了文件的分隔符,文件也可以读入,建议不加分隔符 fread可以自动检测注释,并且跳过注释行   默认skip=0,会跳过不规则的行,因此有注释行时,可以走默认的skip参数 转换成矩阵时可以保留某一列为...rowname   as.matrix作用于data.table时会调用as.matrix.data.table,有一个rownames参数可以指定保留为行名的列 矩阵转换成data.table时可以保留列名...,但在R中用for循环比批量列运算慢的多,因此首选:=或者apply等 在处理浮点数时会有一些准确性的问题   比如用seq函数numeric类型的数值时,会存在不准确的问题,比如seq(0,1,by=...中fintersect, fsetdiff, funion,fsetequal函数能对不同数据框的行求交集,差集,并集等 可以直接对列按分隔符进行分割   应用tstrsplit函数可以将一列按照分隔符分成多列...,函数返回的是一个列表,举例:DT[, c("c1", "c2") := tstrsplit(x, "/", fixed=TRUE)][],将x列按照/分隔,分割成c1,c2两列 支持类似于SQLs的分组运算

    1.8K10

    「R」数据操作(三):高效的data.table

    接「R」数据操作(一)和「R」数据操作(二) 使用data.table包操作数据 data.table包提供了一个加强版的data.frame,它运行效率极高,而且能够处理适合内存的大数据集,它使用[]...构建子集时,能够自动根据语义计算表达式,因此可以直接使用列名,像with()和subset()那样。...对数据进行分组汇总 by是data.table中另一个重要参数(即方括号内的第3个参数),它可以将数据按照by值进行分组,并对分组计算第2个参数。...,这在进行大数据计算时开销很大,data.table提供了一系列支持语义的set函数,它们可以原地修改data.table,因此避免不必要的复制。...然后在每个子集data.table的语义中计算j表达式。

    7.3K20

    数据流编程教程:R语言与DataFrame

    此外,separate和union方法提供了数据分组拆分、合并的功能,应用在nominal数据的转化上。...dplyr/rlist/purrr 1. dplyr dplyr包是现在数据流编程的核心,同时支持主流的管道操作 %>%,主要的数据处理方法包括: (1)高级查询操作: select(): 按列变量选择...filter(): 按行名称分片 slice(): 按行索引分片 mutate(): 在原数据集最后一列追加一些数据集 summarise(): 每组聚合为一个小数量的汇总统计,通常结合gruop_by...ggvis最明显的区别就是在作图时直接支持%>%的管道操作,比如: ggplot2与ggvis的关系类似于plyr与dplyr的关系,都是一种演化过程。 六....data.table完美兼容data.frame,这意味着之前对data.frame的操作我们可以完全保留,并且支持更多方便的数据操作方法。

    4.6K120

    R︱高效数据操作——data.table包(实战心得、dplyr对比、key灵活用法、数据合并)

    R语言︱数据集分组、筛选(plit – apply – combine模式、dplyr、data.table) 同时,data.table与data.frame数据呈现方面,还有有所不同的。...data.table中,还有一个比较特立独行的函数: 使用:=引用来添加或更新一列(参考:R语言data.table速查手册) DT[, c("V1","V2") := list(round(exp(V1...(x)] 还有 data$x 如果有很多名字很长的指标,data.table中如果按列进行遍历呢? data[,1]是不行的,选中列的方式是用列名。...2016-11-28补充: 留言区大神给了一个比较好的选中列的方式,其中主要就是对with的使用: data.table取列时,可以用data[,1,with=FALSE]取data的第一列...参考文献: 些许案例,代码参考自以下博客,感谢你们的辛勤: 1、R语言data.table简介 2、超高性能数据处理包data.table 3、R语言data.table速查手册 4、R高效数据处理包

    11.2K43

    生信技能树 Day8 9 GEO数据挖掘 基因芯片数据

    p) { s = intersect(rownames(pd),colnames(exp)) exp = exp[,s] pd = pd[s,] } 有多个分组,怎么提取两个分组 #现编一个三分组...如果三种办法都不适用,可以继续往后写else if if(F){ # 第一种方法,有现成的可以用来分组的列 Group = pd$ #列名 }else if(F){ # 第二种方法,眼睛数,...) #把R包里的注释表格变成数据框 } 方法2 读取GPL网页的表格文件,按列取子集 https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?...首先确认是不是基因表达芯片,可能是RNA芯片 然后看看别的列,基因名称可能包含在里面。...,只保留行内差别,不保留行间差别,会把数据范围缩放到大概-5~5之间 breaks = seq(-3,3,length.out = 100) #设置色带分布范围为-3~3之间,超出此范围的数字显示极限颜色

    95122

    懒癌必备-dplyr和data.table让你的数据分析事半功倍

    接下来,我就为大家分享几个我在工作当中最常用来做数据分析用到的包,dplyr和data.table,我保证你get到这两个包后,就再也不想用R里面自带的基础包函数进行数据分析了!!...作为课代表的我来帮大家简单的总结一下: 我们都知道R有个令人诟病的缺点就是跑起来耗内存,data.table相对于dplyr 更快、更节省内存了!..."B")] 使用j DT[,v1] #选择v1列 那如果我要选择多列呢,大家注意一下这里不是用c()来选取了, 而是通过.()来选取,注意前面有一个”.”号,所以我说data.table的语法有点奇怪呢...(v1,v2)] 回顾一下我们在上一节最后保留的一段代码: group_by() grouped分组 newdatadata.table以后就再也不想用R里面基础包自带的函数了,今天就黑到这里,匿了~) ——Copyright Reserved by Erin

    3K70

    R语言学习笔记之——数据处理神器data.table

    R语言作为专业的统计计算语言,数据处理是其一大特色功能,事实上每一个处理任务在R语言中都有着不止一套解决方案(这通常也是初学者在入门R语言时,感觉内容太多无从下手的原因),当然这些不同方案确实存在着性能和效率的绝大差异...rm(list=ls()) gc() 2、索引切片聚合 data.table中提供了将行索引、列切片、分组功能于一体的数据处理模型。...data.table列索引 列索引与数据框相比操作体验差异比较大,data.table的列索引摒弃了data.frame时代的向量化参数,而使用list参数进行列索引。...注意以上新建列时,如果只有一列,列名比较自由,写成字符串或者变量都可以,但是新建多列,必须严格按照左侧列名为字符串向量,右侧为列表的模式,当然你也可以使用第二种写法。...当整列和聚合的单值同时输出时,可以支持自动补齐操作。 当聚合函数与data.table中的分组参数一起使用时,data.table的真正威力才逐渐显露。 mydata[,.

    4.3K80

    用data.table语句批量处理变量

    写 在前面 本期“大猫R语言公众号”仍由“村长”供稿。村长继续为大家奉上data.table使用案例心得,希望大家能够继续支持村长!!...问 题:批量处理表中变量 正式开始说问题之前,我们先回顾一下data.table的基本语句DT[i, j, by],简而言之,"i"是对行进行选择,"j"是对列进行操作,"by"是分组。...我们现在要对列进行操作(转换类型),因此本期是关于“j”的内容。 下面正式开始,笔者在帮他人处理数据时遇到了需要同时为一系列变量进行相同处理,先来看数据结构: ?...如何把处理好的这些变量与变量名进行对应,这里就用到了colnames()这个函数,提取出我们这个data.table第3到第34个变量的名字,这样就可以将变量名和更改格式后的变量按顺序进行一一匹配。...下 期预告 下期的大猫R语言课堂还是由村长来进行撰写和推送,届时将会给大家带来一个比较有趣的data.table发现,敬请期待!! ?

    1.5K30

    R语言基因组数据分析可能会用到的data.table函数整理

    版权声明:本文为博主原创文章,转载请注明出处 R语言data.table包是自带包data.frame的升级版,用于数据框格式数据的处理,最大的特点快。...跳过读取的行数,为1则从第二行开始读,设置了这个选项,就会自动忽略autostart选项,也可以是一个字符,skip="string",那么会从包含该字符的行开始读; select 需要保留的列名或者列号...; sep2 对于是list的一列,写出去时list成员间以sep2分隔,它们是处于一列之内,然后内部再用字符分开; eol 行分隔符,默认Windows是"\r\n",其它的是"\n"...patterns patterns是melt函数内部使用的函数,匹配正则表达式。...manual: https://cran.r-project.org/web/packages/data.table/data.table.pdf

    4.4K10

    ​文章复现—bulkRNA转录组结合机器学习等进行相关疾病研究01—多数据集去除批次效应后联合分析以及火山图标准绘制

    列名为median,同时对dat这个矩阵按行操作,取每一行的中位数,将结果给到median这一列的每一行 ids$median=apply(dat,1,median) #对ids$symbol按照ids...(dat)=ids$symbol#把ids的symbol这一列中的每一行给dat作为dat的行名 dat[1:4,1:4] #保留每个基因ID第一次出现的信息}save(gse_number,dat...列名为median,同时对dat这个矩阵按行操作,取每一行的中位数,将结果给到median这一列的每一行 ids$median=apply(dat,1,median) #对ids$symbol按照ids...(dat)=ids$symbol#把ids的symbol这一列中的每一行给dat作为dat的行名 dat[1:4,1:4] #保留每个基因ID第一次出现的信息} save(gse_number,dat...列名为median,同时对dat这个矩阵按行操作,取每一行的中位数,将结果给到median这一列的每一行 ids$median=apply(dat,1,median) #对ids$symbol按照ids

    69121

    R练习50题 - 第一期

    在data.table的语法中,先进行列选择操作,再对列进行处理。所以上述语句会先执行str_detect,再执行unique。 练习2:每天上涨和下跌的股票各有多少?...问题分析 这一题需要引入分组的概念,并且按照“先分组,后统计”两步走。首先按照题意,我们需要为每个交易日date建立一个“组”。...这是因为data.table的第一个语句用来对列进行选择,由于我们这里需要对所有列进行统计,所以不需要进行任何操作。 keyby用来进行分组,是整个代码的核心。先来看keyby = ....整个代码的执行顺序是:先选择行(逗号空白行),再分组(keyby语句),最后进行组间统计(num语句)。 我们的答案中,行、列以及分组三条语句各占一行,实际上这仅仅是为了让代码更直观。...如果你愿意,data.table允许你把所有的代码都写在同一行,就像这样: 下期预告 在下一期,我们会继续带来剩余题目的解答~ 大猫的R语言课堂 我是大猫,一个高中读文科但却在代码、数学的路上狂奔不止的

    2.9K41
    领券