首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

包括两个方面,一方面是写快,代码简洁,只要一行命令就可以完成诸多任务,另一方面是处理快,内部处理步骤进行了程序上优化,使用多线程,甚至很多函数是使用C写,大大加快数据运行速度。...,默认FALSE,如果TRUE,跳过空白 key,设置key,用一个多个列名,会传递给setkey showProgress,TRUE会显示脚本进程,R层次C代码 data.table,TRUE...(x)] #和上面一样 DT[x=="a"] # 和上面一样,和使用on一样,都是使用二分查找法,所以它们速度比用data.frame快。...n列,.N(总列数,直接在j输入.N取最后一列),:=(直接在data.table上添加列,没有copy过程,所以快,有需要的话注意备份),.SD输出子集,.SD[n]输出子集n列,DT[,....roll 当i全部匹配只有某一行不匹配时,填充该行空白,+Inf(或者TRUE)用上一行填充,-Inf用下一行填充,输入某数字时,表示能够填充距离,near用最近填充 rollends

5.6K20

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

N是最常用符号之一,它表示当前分组,对象数目(就不用调用nrow函数啦)。在[]使用它指提取最后一行。...例如使用id和date定位toy_tests记录: setkey(toy_tests, id, date) 现在提供key两个元素就可以获取记录了 toy_tests[....对数据进行分组汇总 by是data.table另一个重要参数(即方括号内3个参数),它可以将数据按照by进行分组,并对分组计算2个参数。...,by所对应组合是唯一,虽然实现了目标,但结果没有设置键: key(type_class_test0) #> NULL 这种情况下,我们可以使用keyby来确保结果data.table自动将...(year = year(date))] } 这里我们使用.SD[[x]]提取x列,这跟通过名字列表中提取成分元素相同。

5.9K20
您找到你想要的搜索结果了吗?
是的
没有找到

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

包括两个方面,一方面是写快,代码简洁,只要一行命令就可以完成诸多任务,另一方面是处理快,内部处理步骤进行了程序上优化,使用多线程,甚至很多函数是使用C写,大大加快数据运行速度。...因此,在对大数据处理上,使用data.table无疑具有极高效率。这里主要介绍在基因组数据分析可能会用到函数。...; verbose 是否交互和报告运行时间; autostart 机器可读这个区域任何行号,默认1L,如果这行是空,就读下一行; skip 跳过读取行数,为1则第二开始读,...; blank.lines.skip 默认FALSE,如果TRUE,跳过空白 key 设置key,用一个多个列名,会传递给setkey showProgress TRUE会显示脚本进程...by.y默认key(y); maxgap 设定两个区域空白区允许最大,参数尚不能使用; minoverlap 设定两个区域最小重叠区,参数尚不能使用; type

3.2K10

手把手教你用R语言读取CSV文件

第二个参数header,表示数据一行,即列名。第三个参数sed,表示数据分隔符。可以设为“\t”(tab分隔符)或者“;”(分号分隔符),以读取不同类型文件。...读取大CSV文件和其他文本文件两个主流函数是read_delim和fread,前者在readr包由Hadley Wickham实现,后者在data.table由Matt Dowle实现。...col_names默认为TRUE,指定文件一行为列名。...02 fread函数 另一个读取大量数据函数是data.tablefread函数。第一个参数是读取文件路径或者URL。header参数表示文件一行是列名,sep指定分隔符。...在数据管理、多层次模型、机器学习、广义线性模型、可视化、数据管理和统计计算等多个领域拥有丰富经验。 本文摘编自《R语言:实用数据分析和可视化技术》(原书2版),经出版方授权发布。

21.3K21

10代码搞定【滚动回归】

如果数据一共有N天,那么就会得到N - n个数据点 这就是滚动回归,一个非常容易理解而且在研究中常常遇见,然而实现起来却不是那么容易问题。在今天大猫课堂,大猫教大家用10代码搞定它!...解 题思路 解决思路并不复杂,假设我们现在要处理t,自变量和因变量分别是x和y,滚动窗口是n天,那么我们只要能够取到x[t-n, t]以及y[t-n,t]两个向量,把他放到lm函数中就可以进行回归得到结果...此处每个id有n = 1000天观测,由于窗口期为100天,因此最终每个id会有1000 - 100 = 900个回归结果 keyby语句将原数据集按照id进行分组,具体作用可以看上期一行代码搞定分组回归...for (t in (n + 1) : .N)语句:每个不同id会有.N天观测(这里是1000),我们需要从 (n + 1)天(在本例是101)开始一直循环到.N天。...关于.SD具体使用可以见上期《一行代码搞定分组回归》 rbindlist()语句:上面对于每一天t我们都生成了一个回归,rbindlist语句将这些回归结果打包起来输出。 总 结 是不是很简单?

2.1K20

R练习50题 - 第一期

写在前面 从这期开始,大猫课堂将会推出一个新系列:R练习50题,目的是使用50道练习题让大家掌握常用数据操作,例如寻找每组最大N个观测等。...unique:找出symbol不重复。 在data.table语法,先进行列选择操作,再对列进行处理。所以上述语句会先执行str_detect,再执行unique。...其中,updown是我们新建字符变量,用来表示分组,它只取两个:UP, DOWN。这其中难点是建立updown这个变量。我们使用了ifelse这个函数。...整个代码执行顺序是:先选择(逗号空白),再分组(keyby语句),最后进行组间统计(num语句)。 我们答案、列以及分组三条语句各占一行,实际上这仅仅是为了让代码更直观。...如果你愿意,data.table允许你把所有的代码都写在同一行,就像这样: 下期预告 在下一期,我们会继续带来剩余题目的解答~ 大猫R语言课堂 我是大猫,一个高中读文科但却在代码、数学路上狂奔不止

2.4K40

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

网络上充斥data.table很好,很棒,性能棒之类,但是我实际使用来看,就得泼个水,网上博客都是拿一些简单案例数据,但是实际数据结构很复杂情况下,批量操作对于data.table编码来说,...data.table语法简洁,并且只需一行代码就可以完成很多事情。进一步地,data.table在某些情况下执行效率更高。...data.table,还有一个比较特立独行函数: 使用:=引用来添加更新一列(参考:R语言data.table速查手册) DT[, c("V1","V2") := list(round(exp(V1...2、on=""方式 DT[X, on="x"] 这里on指的是DT变量变量名称,X还是按照key,如果没设置就会默认第一行为key。...在data.table操作跟data.frame很像,可以data[1,]就可以获得第一行数据,同时也可以用,data[1]来获得信息,这个是data.table特有的。

7.5K43

35代码搞定事件研究法(下)

注意 I,本代码主要使用data.table包完成,关于data.table相应知识会在涉及时候进行讲解。在以后课堂,我们会重点介绍data.table这个包。...用data.table包处理多个事件日 本期课堂核心代码只有下面5(应用了data.table语法): > car <- event[, { > ns <- which(event.flg...就是那个黑色图)。请观察在上面这个抽象后代码,大家应该可以看出我们对event数据集做了三件事情,具体分别为: 选取event中所有的(第一行代码)。...我们一行一行来看: ns <- which(event.flg == 1); 这一行代码作用找到每个股票所有事件日序号 ns。大家应该还记得在上一讲我们用 n 来表示单一事件日序号吧?...do_car() 要求我们提供n, r, rm, date 四个参数,但是向量 ns 只能提供 n 这一个参数,因此我们需要用pryr包partial() 函数把剩下几个变量补充完整(感谢pryr

1.2K40

Linux指令入门-文本处理

word 重复前一个搜寻的动作 :n 一行到最后一行寻找word1字符串,并将该字符串取代为word2 :1,$s/word1/word2/g :%s/word1/word2/g 使用示例 在本示例将使用...命令使用示例: 构造两个相似的文件 echo -e '第一行\n第二\n我是log13\n第四\n第五\n第六' > 1.log echo -e '第一行\n第二\n我是log23\n...使用diff查看两个文件差异 ? 对比结果3c3表示两个文件在3有不同,5,6d4表示2.log文件相比1.log文件在4处开始少了1.log文件5和6。...接着处理下一行,这样不断重复,直到文件末尾。 注意: sed命令不会修改原文件,例如删除命令只表示某些不打印输出,而不是原文件删去。 如果要改变源文件,需要使用-i选项。...默认情况下,awk会输入读取一行文本,然后针对该行数据执行程序脚本,但有时可能需要在处理数据前运行一些脚本命令,这就需要使用BEGIN关键字,BEGIN会在awsk读取数据前强制执行该关键字后指定脚本命令

3.5K20

35代码搞定事件研究法(上)

注意,本代码主要使用data.table完成,关于data.table相应知识会在涉及时候进行讲解。在以后课堂,我们会重点介绍data.table这个包。 ?...3 举一个详细栗子 OK,既然栗子也有了,我们就要正式开工啦。本着特殊到一般原则,在这一讲,我们首先假设现在只有一个事件日。...例如在我们例子30天发生了事件,因而n=30。需要注意是在我们例子 n 是一个标量,下节课我们会把n拓展为向量,也即引入多个事件日。...要知道在R,线性回归结果是一个类名为“lm”对象,这个对象包含了回归结果系数、p、残差等等元素。而coef()函数作用就是提取回归结果系数。 最后看第三。...图中每一行都对应一个事件日,非事件日不输出结果。上图中说明6月17日发生了一个事件。 2. ars是超额收益率向量,因为我们例子把超额收益率区间定为 T 日前后各一天,因此 ars 共有三个元素。

83620

【进阶】Next N rows when condition is TRUE

如果硬要翻译的话,大概就是“当某条件成立时,找到这个观测后N观测”。 举个例子吧! ? 在这个数据集中,我们希望每当condition=1时,就标记出它接下来2(这里N=2了)。...例如,在以上数据集4condition是1, 那么我们能够标记出5以及第6。又由于6分组a变成了b,所以只有5被标记了出来。...具体小伙伴们一看desireOutcome输出就明白了。 看起来似乎无从下手?其实,要实现这一步只需要一行代码哦。 附:生成样例数据集文件: # dt是样例数据集,一共有15。...步 骤分解 我们先把这一行优雅代码放上来: dt[, desiredOutcome := Reduce('+', shift(condition, 0:2, fill = 0)), by = a] 现在我们逐一分析这一行代码...于是很自然,如果我们能将这三个向量相加,那么所有符合要求就都是1, 不符合就都是0了。关键问题在于如果给我们一个list,使用什么方法能够把list每个元素“一一对应”地加总呢?

53610

R Tricks: 如何处理Gaps & Islands问题?

我们可以发现,1至4时间是有重叠,其中最早起始时间是(2014-01-15 08:00:00),最晚结束时间是(2014-01-15 11:00:00)。而5与6时间也有重叠。...) 解 题思路 在解决本问题过程我们需要用到data.table包!...” 我们思路很简单,分成四步: ▶ 将数据集按照ID与起始时间(stime)进行排序 ▶ 找到结束时间(etime)累计最大 ▶ 一旦完成以上两步,那么重叠即为当前结束时间(etime)累计最大仍旧大于下一行观测...上一行代码使用关键函数是累计最大函数cummax。此外,由于cummax不能直接处理日期格式,所以需要先将日期转化为数字进行比较,完了再转换回日期。...cumsum(stime[2:.N] > etime.max[1:(.N - 1)])表示如果当前行stime比上一行etime.max要大,那么返回TRUE,同时grp+1(我们用cumsum

1.1K20

vi编辑器

快速移动光标:适合长距离快速移动光标在文件位置命令:G:跳转到文件最后一行、G是go1个字母nG:跳转到文件n ------ n为自然数1、2、3等Ctrl+d:光标下移半屏幕、d是down...L(Low):光标跳到屏幕最后一行 ------ 即最下面一行z:使(光标所在)当前行变为屏幕1vi过滤功能:vi可直接使用Linux命令,这就是vi所谓过滤功能(Filtering...查找和替代命令指定搜寻和替代范围:不指定:仅为当前行n1,n2:n1到n2,其中n1和n2都是自然数1,$%:整个文件.,.+n当前行到当前行加n.,....-n当前行到当前行减n行间接读写文件操作:vi引入了一些同时编辑多个文件命令,所有这些命令必须在扩展模式使用,常用读写不同文件命令如下::r dog:将名为dog文件内容读入到当前文件,:...文件之间切换:在使用vi同时编辑器(开启)多个文件时,还可以使用如下vi命令在不同文件之间进行切换::n:当前文件切换到下一个,n是next1个字母:rew:倒转到1个文件、rew是rewind

2.8K40

Linux查看日志文件正确姿势,求你别tail走天下了!

表示向上查找,此时n会向上查找 N: 反向重复前一个查找 g :跳转到当前文件数据一行 G :跳转到当前文件数据最后一行 q :退出当前文件浏览 范例演示 ?...选项与参数 -n : 查看后n行数据,注意当n后面值带“+”号表示x开始, 如 tail -n +1000 test.txt -f : 展示文件后面 范例1:查看尾部5数据【tail -n...通用命令 管道:Shell 还有一种功能,就是可以将两个或者多个命令(程序或者进程)连接到一起,把一个命令输出作为下一个命令输入,以这种方式连接两个或者多个命令就形成了管道(pipe),管道命令用...grep :命令用于查找文件里符合条件字符串,这两个命令也是linux中最常用,而在查看日志文件也通常会结合这两个命令一起使用。...范例:查看文件行数 wc -l 案例实战 案例1:打印日志文件11到20。 思路:首先获取前20,然后在获取20后10即可,需要使用管道命令。

3.4K20

Matt Dowle 演讲节选(二)

在这行代码,B 来自于 DF 这个表,而不是 global environment。...Matt 还不满意,“如果我希望把上面代码得到数据集按照population排列呢?难道还要另起一行?这样就生成太多无用中间数据集了啊……”于是 Matt 心生一计:“把他们都串起来!”...[, v1 := i] # 1 s 上面两代码做都是同一件事:把变量v111000分别设置为1至1000。...这里关键在于,在第一种方法,每为新一行赋值,data.table就要重新复制一遍DT,也就是说,第一种方法运行过程,DF被复制了1000遍!...这个用户一开始使用lapply和do.call函数,不仅计算时间很长(30 min!),而且代码特别难看: ? 而使用data.table,则简直是一阵春风: ?

1.1K40

《高效R语言编程》6--高效数据木匠

用法是:gather(data,key,value,-religion),分别是数据框,要转换成分类列名,单元列名和清除收集变量 使用seperate()分割联合变量 分割是指将一个实际由两个变量组成变量分割成两个独立列...与基本R类似函数不同,变量无需使用 $ 操作符就可直接使用,设计与magrittr包%>%管道操作符一起使用,以允许每个数据阶段写成新一行。其是一个大型包,本身可以看成一门语言。...非标准计算 代码没有引号包裹原始名字,这种方式叫做非标准计算(NSE),高效交互使用函数,减少键盘输入,允许Rstudio自动完成。还是函数名多个_。...R会把所有数据加载到内存,数据库是硬盘获取数据。...数据库与dplyr 必须使用src_*()函数创建一个数据源。# 使用data.table()处理数据 是dplyr替代,两个哪个好存在争议,最好学一个一直坚持下去。

1.9K20

数据结构·面试·数组高频题·中位数问题K大问题等

暴力法:先跟每一行最后一个数比较确定其在哪一行(O(n)),再在确定中二分查找O(lgm)最优解 O(n), 排除法,见后文。...最优解: (这一段说得好乱)每一行每一列数都算作一个序列,右上角(左下角)是两个序列头(尾),且这两个序列连起来是一个严格递增(递减)大序列,角落数在这个递增递减大序列里,目标数如果不等于角落里数...O(n) 例题:https://blog.csdn.net/wzwdcld/article/details/81606960 *【3*】【我面阿里是遇到】每行从左到右,每列从上到下递增,且下一行全部大于上一行二维数组...暴力:先跟每一行最后一个数比较确定其在哪一行(O(n)),再在确定中二分查找O(lgm) 排除法:O(n) 最优解:将输入二维数组a[i][j]和一维数组b[k]间做单射, b[k] = a[k...无序数组求最大、第二大、第三大 直接建堆 O(lgn),堆顶就是最大 【3*】求无序数组 k 大中位数(分数组长度奇数和偶数)(拓展:最大 k 个数) 用数组前k个数建立大小为

1.4K20
领券