2、cut()函数 cut(x, n):将连续型变量x分割为有着n个水平的因子 cut(x, breaks, labels = NULL, include.lowest = FALSE, right...3.aggregate函数对分组字段的顺序有一个奇怪的要求:必须反向排列。...5、which定位函数 功能:返回服从条件的观测所在位置(行数),有一定的排序功能在其中。...data.table包提供了一个非常简洁的通用格式:DT[i,j,by],可以理解为:对于数据集DT,选取子集行i,通过by分组计算j。...data.table比较简洁一步搞定,dplyr花了两步,不过也dplyr也可以通过%>%来实现一步搞定。%>%的功能是用于实现将一个函数的输出传递给下一个函数的第一个参数。
版权声明:本文为博主原创文章,转载请注明出处 R语言data.table包是自带包data.frame的升级版,用于数据框格式数据的处理,最大的特点快。...包括两个方面,一方面是写的快,代码简洁,只要一行命令就可以完成诸多任务,另一方面是处理快,内部处理的步骤进行了程序上的优化,使用多线程,甚至很多函数是使用C写的,大大加快数据运行速度。...将一个R对象转化为data.table,R可以时矢量,列表,data.frame等,keep.rownames决定是否保留行名或者列表名,默认FALSE,如果TRUE,将行名存在"rn"行中,keep.rownames...文件路径,再确保没有执行shell命令时很有用,也可以在input参数输入; stringsASFactors是否转化字符串为因子, verbose,是否交互和报告运行时间; autostart,...=FALSE] 和x[, .SD, .SDcols=cols]一样 mult 当有i 中匹配到的有多行时,mult控制返回的行,"all"返回全部(默认),"first",返回第一行,"last"返回最后一行
另一方面,data.table仅使用列名就足够了。 示例3 在数据分析中使用的一个非常常见的函数是groupby函数。它允许基于一些数值度量比较分类变量中的不同值。...我们使用计数函数来获得每组房屋的数量。”。N”可作为data.table中的count函数。 默认情况下,这两个库都按升序对结果排序。排序规则在pandas中的ascending参数控制。...data.table中使用减号获得降序结果。 示例5 在最后一个示例中,我们将看到如何更改列名。例如,我们可以更改类型和距离列的名称。...总结 我们比较了pandas和data.table在数据分析操作过程中常见的5个示例。这两个库都提供了简单有效的方法来完成这些任务。 在我看来,data.table比pandas简单一点。...需要指出的是,我们在本文中所做的示例只代表了这些库功能的很小一部分。它们提供了许多函数和方法来执行更复杂的操作。 感谢您的阅读。如果你有什么反馈,请告诉我。
包括两个方面,一方面是写的快,代码简洁,只要一行命令就可以完成诸多任务,另一方面是处理快,内部处理的步骤进行了程序上的优化,使用多线程,甚至很多函数是使用C写的,大大加快数据运行速度。...因此,在对大数据处理上,使用data.table无疑具有极高的效率。这里主要介绍在基因组数据分析中可能会用到的函数。...; na.strings 对NA的解释; file 文件路径,再确保没有执行shell命令时很有用,也可以在input参数输入; stringsASFactors 是否转化字符串为因子...; verbose 是否交互和报告运行时间; autostart 机器可读这个区域任何行号,默认1L,如果这行是空,就读下一行; skip 跳过读取的行数,为1则从第二行开始读,...; nomatch 不匹配时返回的值,强制转化整型 好了,写到这里写的都有点累了,再介绍最后一个函数,有时候我们需要了解你写的这个脚本运行所花费的时间,这个时候保存开始运行时间和结束运行时间
关于dplyr的基本操作我已经写过很多笔记了,不再赘述,这篇文章重点介绍 dplyr 的一个函数 do() 的用法。...与data.table类似,dplyr也提供了do()函数来对每组数据进行任意操作。 例如将diamonds按cut分组,每组都按log(price) ~ carat拟合一个线性模型。...和data.table不同的是,我们需要为操作指定一个名称,以便将结果存储在列中。而且do()表达式不能直接在分组数据的语义下计算 ,我们需要使用.来表示数据。...Good #> 3 Very Good #> 4 Premium #> 5 Ideal 注意结果创建了一个新列... #> 1 T01 9.32 9.38 #> 2 T02 9.04 8.34 为了查看中间结果,可以运行
接「R」数据操作(一)和「R」数据操作(二) 使用data.table包操作数据 data.table包提供了一个加强版的data.frame,它运行效率极高,而且能够处理适合内存的大数据集,它使用[]...例如,使用setkey()将id设置为product_info中的一个键: setkey(product_info, id) 同样的,函数无任何返回,但我们已经为原始数据设置了键,而且原来的数据看起来也没变化...TRUE 也可以使用setkeyv()来设置键,但它只接受字符向量: setkeyv(product_stats, "id") 当key是一个动态变化的向量时,这个函数会非常好用。...中,by所对应的组合中的值是唯一的,虽然实现了目标,但结果中没有设置键: key(type_class_test0) #> NULL 这种情况下,我们可以使用keyby来确保结果的data.table自动将...举例,我们定义一个函数,计算market_data中由用户定义的列的年度均值: average = function(column){ market_data[, .
首先,假设我有一个这样的数据集(暂且命名为t1): ? 现在我想做的是对于每一行,找出非NA的值,填充到“mean.scale”这个新的变量;如果有多个非NA,那么就计算其平均值。...对,这个步骤和cast和melt函数的作用类似,只不过这里直接用了data.table自己的语句。...事实上,data.table也整合了reshape中的cast和melt函数,并且将cast函数升级为dcast,感兴趣的小伙伴可以去研究一番。 在拉直数据后,接下来要做的工作就很简单了。...我们只要把数据按照fund_name分组,然后对每组求scale的均值。唯一需要注意的有两点。首先,别忘了mean中的na.rm = T参数,它能够让函数忽略缺失值。...R的数据处理哲学是向量,是列,但这并不妨碍我们按照行进行处理,其中的关键,就在于运用 c() 函数把不同的向量拼接成一个向量。 我是大猫,咱们下期见! 附:Stackoverflow的原始问题 ?
写在前面 从这期开始,大猫课堂将会推出一个新的系列:R练习50题,目的是使用50道练习题让大家掌握常用的数据操作,例如寻找每组最大的N个观测等。...值得说明的有一下几点: 数据集为“面板数据”:包含多个股票(横截面),而每个股票则有多个按照日期排序的变量(时间序列) 股票代码symbol 和日期date共同组成了数据集的key,也即每个唯一的symbol...例如股票600128,如果它一共有100天的观测,那么我们会出现100个重复结果。为了去重,我们需要借助于data.table中的unique函数。 我们希望最终的输出是一个字符串向量: ?...str_detect(symbol, "8")含义为:对于symbol向量,判断其是否含有字符8,如果有,则为True,否则Faulse。 unique:找出symbol中不重复的值。...代码第二行生成了一个新变量num。由于在keyby语句中我们已经按照日期与涨跌进行了分组,所以这一步我们只需要统计每个组有多少个股票就可以了。我们在这里使用了uniqueN这个函数。
" "data.frame" as.data.table() as.data.table()的适用范围更广 data.table::copy() 复制数据起一个新的名字,因为data.table...的部分函数在使用的过程中会直接对原来的数据进行改写,为了防止原来的数据被改变,使用拷贝的文件。...输出R环境中名为dt的数据框为.csv文件 foverlaps() foverlaps() 格式 foverlaps(x, y, by.x = if (!...overlap,使用y作为索引去x中寻找有overlap的情况 > x = data.table(chr=c("Chr1", "Chr1", "Chr2", "Chr2", "Chr2"), +...对应y中列的名称 数据的拆分和合并 melt() dcast() > reshape_dt <- data.table(kinds = c(rep("peach", 2), rep("grape",
来自很久之前的官网文档。 data.table包提供了一个加强版的data.frame。它运行效率极高,而且能够处理适合内存的大数据集。它通过[ ]实现了一种自然的数据操作语法。...如果你还没有安装该包,运行: install.packages("data.table") 导入包 library(data.table) 创建一个data.table set.seed(45L)...DT[, V2] ## [1] "A" "B" "C" "A" "B" "C" "A" "B" "C" "A" "B" "C" # 返回第二列与第三列为一个data.table DT[, ....DT[, sum(V1)] ## [1] 18 # 返回V1列的和,V3列的标准差为一个data.table DT[, ....12 # 返回V2,V3为一个data.table DT[, .
需要注意一点的是,在计算FPKM/RPKM和TPM时,基因长度一般指的都是基因有效长度effective length,即该基因的外显子总长度或转录本总长度,以此为标准来消除测序造成的基因长度影响才更为准确...) #可多核读取文件 a1 <- fread('counts.txt', header = T, data.table = F)#载入counts,第一列设置为列名 ### counts矩阵的构建...注意,由于每个样本中基因的EffectiveLength有差异,我们要提取的实际为EffectiveLength的矩阵(或者可以每行EffectiveLength取均值)。...library(tximport) #t2s为从gtf文件中提取的transcript_id和symbol的对应关系文件 t2s <- fread("t2s_vm29_gencode.txt", data.table...首先看看从gtf文件中获取基因有效长度的两种方法是否有差异。
(1)提取表达矩阵exp exp <- exprs(eSet) # exprs 提取数据的函数 dim(exp) # 多少行多少列 range(exp) # 看数据范围决定是否需要log,是否有负值,异常值...)提取表达矩阵exp > exp <- exprs(eSet) > dim(exp) [1] 54675 20 > range(exp)#看数据范围决定是否需要log,是否有负值,异常值 [1]...p) { s = intersect(rownames(pd),colnames(exp)) exp = exp[,s] pd = pd[s,] } 有多个分组,怎么提取两个分组 #现编一个三分组...acc=GPL570 代码下载 #获取表格下载链接 get_gpl_txt(gpl_number) 如何读取表格并提取子集,以GPL28098为例 #读取表格 a = data.table::fread...singleDoc# 《一个有点难的探针注释》 包含在ENTREZ_GENE_ID中 library(tinyarray) find_anno("GPL30971") get_gpl_txt("GPL30971
现在我们希望针对每个计算当期的增长率,其公式如下: 大家可能首先想到的是利用For循环来做。假如一个向量长度为,那么我们就把上面的增长率公式应用遍。这种思路以标量(scalar)的角度考虑问题。...这样是否真的有效率?除此之外,能否有其他的思路? ” 解决方法 For循环 首先我们用R语言最底层的For循环进行函数的编写。...我们定义向量长度为10000,重复运行1000次,测定计算其运行的中位数时长(为了防止极值对结果的影响)。...由于我们需要做的是向量中某一个元素与前一个元素的处理结果,那么只需要将元素往后进行移位,与原来的向量进行一一对应的处理即可,这样便达到了以向量进行处理的模式。...当遇到一些特殊情况,比如函数嵌套调用过多,或者数据迭代问题,对更为底层的语言进行调用,则会显得更为有效。
同时设置两个key变量的方式,也是可以的。 查看数据集是否有key的方式: key(data) #检查该数据集key是什么?...haskey(data) #检查是否有Key attributes(data) key()可以告诉你,数据集中的Key是哪几个变量?...data.table中,还有一个比较特立独行的函数: 使用:=引用来添加或更新一列(参考:R语言data.table速查手册) DT[, c("V1","V2") := list(round(exp(V1...这里有一个重要的点:使用”==”操作符,那么它会扫描整个数组,虽然data.table用这种方法也可以提取,但很慢,要尽量避免。...%>%的功能是用于实现将一个函数的输出传递给下一个函数的第一个参数。注意这里的,传递给下一个函数的第一个参数,然后就不用写第一个参数了。在dplyr分组求和的过程中,还是挺有用的。
在实际使用中,data.talbe::fread()的读取速度可以比原生的read.csv有3-10倍的提升速度。...当然你可以用它来做简单的爬虫应用,如果需要更高级的爬虫,我们需要投入rvest的怀抱来支持诸如xpath等高级爬虫特性。 3. DBI DBI是一个为R与数据库通讯的数据库接口。...此外,purrr引入了静态类型,来解决原生的apply函数族类型系统不稳定的情况。 我遇到过一个非常头疼的apply函数的问题:apply内的表达式计算结果不一致。...DataFrame优化 1. data.table 众所周知,data.frame的几个缺点有: (1)大数据集打印缓慢 (2)内部搜索缓慢 (3)语法复杂 (4)缺乏内部的聚合操作 针对这几个问题,data.table...data.table还参考了NoSQL中流行的Key-Value形式,引入了setkey()函数,为数据框设置关键字索引。
其中图5是对因子IC序列进行自回归测试的结果,有43个因子IC的自回归系数为正。其中图6表示因子收益(每个因子多空组合的收益)自回归测试的结果,有47个因子的自回归系数为正。...这是由于因子拥挤造成的。因子拥挤度可以通过一个月的因子横截面重要性与历史重要性滚动平均值的相对值来评估。由于因子库包含具有相似特征的因子,因此在测量因子拥挤度时可以将它们分组到不同的聚类中。...尽管单因子不稳定,但每组中总有有效的因子,说明在模型要考虑每组中因子的分散性。 因子很有可能由于因子拥挤而衰减,说明因子拥挤可以用在因子权重配比中。...如果这一步选出因子,再在这组剩下的因子中,选择一个IC最高的,此时这组有两个因子进入下一步。 最终确保每组都至少有2个(或者4个)因子进入下一步。...Model3与Model2的区别是因子的选择是每年滚动选取,也是基于ICIR绝对值排序每组选取两个因子。 Model4是一个动态因子模型,在每一组中,每个月选取上一期因子IC最大的两个因子。
开放地址法 开放地址法是另一种(相对于分离链接法)解决散列冲突的方法。适用于装填因子(散列表中元素个数和散列表长度比)较小(小于0.5)的散列表。...开放地址法中索引的计算方法为$$h_{i}(x) = (Hash(X) + F(i)) % TableSize$$,其中: Hash(x)为索引的计算方法 F(i)为冲突的解决函数,有F(0) = 0,...i为已经尝试计算索引的次数 F(i)一般有: 线性探测法:$$F(i) = i$$,即每次冲突则向下寻找1个位置,直到找到不冲突的位置,容易产生“一次聚集”的现象(数据集中在某一个地址区域) 平方探测法...:$$F(i)=i^{2}$$,每次冲突按平方寻找下一个位置,直到找到不冲突的位置 双散列:$$F(i) = i\cdot hash_{2}(x)$$,即发生冲突后使用第二个散列函数计算下一个位置 代码实现...// 节点数据 type tableData struct { data int } // 节点 type tableNode struct { flag bool //是否已经插入数据
★邓飞注:原始数据下载链接,https://luansheng.netlify.com/post/datasets/shrimp.csv ” 推荐使用Rstudio来运行R,依赖的R包有: data.table...其中的参数sep表示文件是用逗号分割,header表示数据文件中第一行是列名,stringsAsFactors表示读入的数据,对于字符类型,是否自动处理为因子类型。...为了方便后边模型处理,这里设置为因子类型。 str()函数可以对数据集有一个汇总。...P值是否小于0.05或者0.001,已经成为文章结果是否可靠,是否能够发表的一个重要标志。但是,p值一定程度上就像SCI论文的影响因子,有点滥用的味道。...这反过来表明,性别影响了对虾的体重,雌雄虾体重是有差别的,也就是说统计上是显著的。 需要注意的另外一个问题是,模型所有效应的显著性(最底部)与系数列表单个效应的显著性还是存在差别的。
所以通常很少看比例,而是看各个细胞亚群的标记基因组成的特征基因集是否有特殊的生物学意义,比如生存分析的统计学显著。...然后研究者拿这些基因集去TCGA数据库里面检验它们是否在各个癌症里面可以统计学显著的区分生存,而且判定它们是保护因子还是风险因子。...接下来就可以挑选C0和C10以及C13这3个单细胞亚群,来展现它们特异性高表达量基因集,根据log2FC排序的: 其实C10和C13其实主要是细胞周期基因比如TOP2A和CDK1等等,它必然是肿瘤风险因子啦...: # pan-cancer官网自带一个免疫细胞比例 library(data.table) cib = fread('TCGA.Kallisto.fullIDs.cibersort.relative.tsv...])/(fit$obs[2]/fit$exp[2]) return(c(p.val,HR)) } }) return(sur_list) } 所以我们可以对全部的免疫细胞比例独立运行上面的函数
如果数据一共有N天,那么就会得到N - n个数据点 这就是滚动回归,一个非常容易理解而且在研究中常常遇见,然而实现起来却不是那么容易的问题。在今天的大猫课堂中,大猫教大家用10行代码搞定它!...为此我们构造样例数据集,我们假设一共有5个不同的组,每组都由1000天的观测,包含自变量x与因变量y。此外,我们假设窗口期 n = 100 天。 图:样例数据集 ?...需要注意的是我们需要遍历每一个符合条件的t,以及需要把最终结果输出成一个漂亮的数据集。 步 骤分解 大猫先把代码放上来: # 设定滚动窗口期,这里为100天 n <- 100 # 计算滚动回归!...此处每个id有n = 1000天观测,由于窗口期为100天,因此最终每个id会有1000 - 100 = 900个回归结果 keyby语句将原数据集按照id进行分组,具体作用可以看上期的《一行代码搞定分组回归...但是,这个滚动回归的代码也不是完美的,最大的劣势就在于我们的滚动窗口是用“期”而不是用“天”来定义的,也就是说,程序在每次滚动的时候都会固定找前面n期的观测,而不管这n期之间可能间隔的是10天,20天还是一个月
领取专属 10元无门槛券
手把手带您无忧上云