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

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

2、cut()函数 cut(x, n):将连续变量x分割为有着n水平的因子 cut(x, breaks, labels = NULL, include.lowest = FALSE, right...介绍一种按照日期范围——例如按照周、月、季度或者年——进行分组的超简便处理方式:R语言的cut()函数。...##按照已有的类别数据,分类 g<-split(Cars93,Cars93$Origin) #按照cars93数据集,按照origin进行分组 ##例2:矩阵分组列) m<-cbind...base包里和split功能接近的函数有cut(属性数据分划),strsplit(字符串分划)以及subset(向量,矩阵或数据框给定条件取子集)等。...tapply 只对单字段分组适用,进行双字段联合分组时其结果为二维矩阵,用户还需要进行复杂的处理才行,比如 tapply(orders$AMOUNT, orders[,c("SELLERID","CLIENT

20.5K32

data.table语句批量处理变量

问 题:批量处理表变量 正式开始说问题之前,我们先回顾一下data.table的基本语句DT[i, j, by],简而言之,"i"是进行选择,"j"是进行操作,"by"是分组。...直 观处理法:分别处理每一变量 大家最直观的处理方法,肯定是把每一变量写在j然后分别进行日期格式的修改,诸如如下形式: DT[, ':='(`除权除息日\r\n[报告期] 2010一季` = as.Date...批 量处理法:用lapply批量处理变量 在此时lapply的妙用就显现出来了,Rlapply用来list每一element进行相同处理,如何把它运用到data.table,话不多说先上代码:...我们知道data.table,.SD是经过i和by处理之后剩下的那部分数据集,它的格式是一data.table,同时它是一list。...如何把处理好的这些变量变量进行对应,这里就用到了colnames()这个函数,提取出我们这个data.table第3到第34变量的名字,这样就可以将变量名和更改格式后的变量顺序进行一一匹配。

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

R Tricks: 如何巧为观测标记序号

例如连续出现30, 那么n就标记为1、2、3,如果后面接了一1, 那么就重新从1开始标记。也即最终的结果应该是: ? 可以看到,group每变动一回,n就重新计数一次。...目前为止,我们已经成功把每次变化都分组并加以标号(见cumsum变量),看起来是不是几乎大功告成了?...注意,我们这里用cumsum的值进行分组,并且用了seq(.N)这个语句。".N"表示当前by组有多少的观测,而seq(.N)则产生从1至.N的一整数序列。...因为这组一共只有两行,所以.N=2,而seq(.N)就产生{1, 2}这样一整数序列,并最终赋值给n。...如果把上面三步写成一行代码就是这个样子: ▶ dt[, n := seq(.N), by = list(cumsum(c(0, abs(diff(group)))))] 本 期总结 本期大猫带领大家学习了一分组观测进行编号的小技巧

96710

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

(sum(y)), by=x] # x列进行分组分组y列求总和 DT[, sum(y), keyby=x] #x列进行分组分组y列求和,并且结果按照x排序 DT[, sum(y)..., by=x][order(x)] #和上面一样,采取data.table的链接符合表达式 DT[v>1, sum(y), by=v] #v列进行分组后,取各组v>1的行出来,各组分别对定义的行的...函数画图,对于每个x的分组画一张图 DT[, m:=mean(v), by=x] #DTx列分组,直接在DT上再添加一列m,m的内容是mean(v),直接修改并且不输出到屏幕上 DT[, m:=mean...(v), by=x] [] #加[]将结果输出到屏幕上 DT[,c("m","n"):=list(mean(v),min(v)), by=x][] # x分组后同时添加m,n 两列,内容是分别是mean...(y=max(y)), lapply(.SD, min)), by=x, .SDcols=y:v] #DT取y:v之间的列,x分组,输出max(y),y到v之间的列每列求最小值输出。

5.6K20

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

2、条件行筛选 从前用subset的方式进行筛选比较多, new=14,select=a:f) (1)单变量 现在data.table与dplyr from_dplyr =...%>%的功能是用于实现将一函数的输出传递给下一函数的第一参数。注意这里的,传递给下一函数的第一参数,然后就不用写第一参数了。dplyr分组求和的过程,还是挺有用的。...data.table中有三类数据合并的方式: 1、直接用[] data_one[data_two,nomatch=NA,mult="all"] 以第一数据为基准,依据key进行合并,只出现重复部分...,他包含了各个分组,除了by变量的所有元素。....(x)] 还有 data$x 如果有很多名字很长的指标,data.table如果进行遍历呢? data[,1]是不行的,选中列的方式是用列名。

7.5K43

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

注意 I,本代码主要使用data.table包完成,关于data.table包的相应知识会在涉及的时候进行讲解。以后的课堂,我们会重点介绍data.table这个包。...选中的变量进行操作(第二行代码)。此处,所有的操作都用大括号{}包裹了起来。 event按照stk.id进行分组(第三行代码)。...do_car() 要求我们提供n, r, rm, date 四参数,但是向量 ns 只能提供 n 这一参数的值,因此我们需要用pryr包的partial() 函数把剩下的几个变量补充完整(感谢pryr...这也是一比较常见的设定。 大猫用这个数据集自己的surface pro 4 i5版上连续跑了三遍,每一次的耗时分别为: 79s 81s 82s 三次平均耗时80秒左右。...语句“car :=” 表示原数据集中新建一名为 car 的变量,vapply(ars, sum)的含义是把超额收益率向量ars的元素相加,double(1)指定输出的必须是一标量(因为对于每个事件日

1.2K40

【技巧】如何快速按照日期分组

问题的提出 处理数据的时候,我们常常需要按照日期对数据进行分类汇总,例如每周、每月、每年汇总等。常见的做法是建立一用于分类的变量,然后再按照这个变量进行汇总。...实战操作 生成样例数据集 首先我们生成一样例数据集: # 生成 100 日期,从2018-01-01开始 set.seed(42) n <- 100 dt <- data.table(date =...按照周进行分类 如果我们想要每周变量 x求均值,只要在 keyby语句中指定 week=week(date)即可: # 按照周进行分组 dt[, .(x = mean(x)), keyby = ....按照“每个三天”分类 为了按照任意间隔进行分类,我们需要用到 data.table的 ceiling_date函数。...在下面的代码, ceiling_date(date,"3 days")含义是每三天 date进行一次“四舍五入”。 # 按照“每3天”进行分组 dt[, .

2.4K30

R练习50题 - 第一期

unique:找出symbol不重复的值。 data.table的语法,先进行列选择操作,再进行处理。所以上述语句会先执行str_detect,再执行unique。...这是因为data.table的第一语句用来进行选择,由于我们这里需要对所有列进行统计,所以不需要进行任何操作。 keyby用来进行分组,是整个代码的核心。先来看keyby = ....(date, updown)这个结构,他的意思是,把整个数据集按照date和updown两变量进行分组,并依次排序。...代码第二行生成了一变量num。由于keyby语句中我们已经按照日期与涨跌进行分组,所以这一步我们只需要统计每个组有多少个股票就可以了。我们在这里使用了uniqueN这个函数。...整个代码的执行顺序是:先选择行(逗号空白行),再分组(keyby语句),最后进行组间统计(num语句)。 我们的答案,行、列以及分组三条语句各占一行,实际上这仅仅是为了让代码更直观。

2.4K40

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

mydata[carrier %in% c("AA","AS"),.N] [1] 26876 .N是一计数函数,相当于plyr的count,或者基础函数的length。...当聚合函数与data.table分组参数一起使用时,data.table的真正威力才逐渐显露。 mydata[,....如果想要运行的同时进行输出则可以结尾加上[] setorder(mydata,carrier,-arr_delay)[] ? 这个功能有点儿类似于基础函数语句外部加上圆括号。...以上语法加入了新的参数.SDcols和.SD,咋一看摸不着头脑,其实是在按照carrier,origin,dest三维度分组的基础上,每个子块特定列进行均值运算。...(carrier,origin,dest) 先按照三维度进行全部的分组; .SDcols=c("arr_delay","dep_delay")则分别在筛选每一子数据块儿上的特定列; lapply(.

3.6K80

R练习50题 - 第六期

接下来以日期date和行业industry进行分组,最后每组以amount最大值除以amount最小值:times = amount[1]/amount[.N]。...注:在此处有一data.table的小技巧,i的排序和选择的操作的代码中分成了两步,这是因为这两部分不能够以order(date, industry, -amount) & amount > 0...这一题的关键在于运用了分组以后的.SD选择,这是一data.table包的常用技巧。 line 1 计算了个股每日的收益率ret,再将其余需要的变量挑选出来。 line 2 是本题的关键。...line 5 计算max10%和min10%这两变量的相关系数。因为变量名中出现的%,会在函数自动识别为函数%,如果需要讲变量进行引用,则需要运用引用符号``这个函数。...注:此处作者进行解答时,特意应用了max10%和min10%两变量名,仅为了说明``的用法,大家一般编写过程则需尽量避免变量名与函数的混用!! ?

53250

从一件数据清洗的小事说起

村长,数据科学、指弹吉他及录音工程爱好者,浙大金融学博士在读,data.table包和MongoDB的使用上有较多经验。...问 题:从一段json清晰代码说起 笔者某一日R语言中文社区某一群里面发现了水友提出的一问题,处理一比较奇葩的数据清洗问题,先来看数据结构: ?...这是一类json格式嵌套的数据,其中存在两变量,第一变量是cusnum作为序号,第二是一类json的嵌套变量,里面以类jsno格式嵌套了很多变量。 需要将这个数据集转换成如下格式: ?...其实这一期这么扯淡的讲这么多事情,只是为了说明一点,data.table真的有很好的性能,尤其处理海量数据方面(分组特别多的时候,相比dplyr和pandas有2x~10x的提升,来自官方文档)。...相较之下,data.table则通过把数据处理中最常见的“选取行”、“修改列”、“分组”三大操作通过dt[i,j,by]的语法统一了一起来。

67010

Matt Dowle 演讲节选(二)

例如代码DF[2:3, sum(B), by = group],其中i的部分为2:3,表示行的选择;j的部分为sum(B),表示进行运算;by的部分对应by = group,表示按照变量group...进行分组。...Matt 接着想,如果我还想要将数据集按照特定变量分组呢?何不把分组这个命令也一块给整合进去?...而在第二种方法,由于采用了 assignment by reference,data.table仅对内存v1所的地址进行修改,其他地方则不变!事实上,DF 第二种方法中一遍都没有被复制!...在这个2012年(注意dplyr的最早版本2016年!)的帖子,一用户需要处理以下数据集(这里只显示前6行) ? 他想首先按照gene_id分组,然后分别计算特定变量的极值和均值。

1.1K40

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

p) { s = intersect(rownames(pd),colnames(exp)) exp = exp[,s] pd = pd[s,] } 有多个分组,怎么提取两分组 #现编一分组...pd$group = rep(c("group1","group2","group3"),times = c(6,6,8)) #假如需要从多个分组里面取两分组对应的行 library(stringr...,后续进行下一步 原始数据处理的代码,按需学习 https://mp.weixin.qq.com/s/0g8XkhXM3PndtPd-BUiVgw Group(实验分组)和ids(探针注释) rm(list...library(stringr) # 标准流程代码是二分组,多分组数据的分析后面另讲 # 生成Group向量的三种常规方法,三选一,选谁就把第几个逻辑值写成T,另外两为F。...singleDoc# 《一有点难的探针注释》 包含在ENTREZ_GENE_ID library(tinyarray) find_anno("GPL30971") get_gpl_txt("GPL30971

15120

RNA-seq入门实战(三):R里面整理表达量counts矩阵

大家开始根据我的ngs组学视频进行一系列公共数据集分析实战,其中几个小伙伴让我非常惊喜,不需要怎么沟通和指导,就默默的完成了一实战!...他前面的分享是: Counts FPKM RPKM TPM CPM 的转化 获取基因有效长度的N种方 下面是他我们b站转录组视频课程的详细笔记 本节概览: 从featureCounts输出文件获取...一般为了样品进行分组注释我们还需要在GEO网站下载样品Metadata信息表SraRunTable.txt,接下来就需要在R输出结果进行操作,转化为我们想要的基因表达counts矩阵。.../Lenovo/Desktop/test") #### counts进行处理筛选得到表达矩阵 #### a1 <- fread('....转换时经常会出现多个Ensembl_id对应一gene symbol的情形,此时就出现了重复的gene symbol。此时就需要我们进行基因ID转换前去除重复的gene symbol。

14.8K45

一行代码搞定分组回归

写 在前面 目前为止所有小伙伴们向大猫请教过的R问题中,大猫总结了最常遇见同时也是比较难的三问题,分别是(1)事件研究法;(2)分组回归;(3)滚动回归。...事件研究法第一期已经讲述,本期我们就来瞧瞧如何做分组回归~ PS:由于微信的限制,给大猫留言的小伙伴超过48小时后大猫就不能回复你们了。所以如果想联系大猫,可以按照文章最后的微信号加大猫微信哦。...stkid代表分组变量,有a, b, c, d, e五类别;x和y分别随机生成 dt <- data.table(stkid = sample(letters[1:5], 100, replace =...keyby语句为data.table分组语句,它能够keyby的每一不同的值(这里为abcde)都分别跑一次回归。...如果我们的回归不是单自变量而是双自变量,那么每个分组就会有三行观测了,一行是截距,还有两行是系数。

3.4K40

10行代码搞定【滚动回归】

写 在前面 “ 对于任意一天t,[t - n, t]的区间内进行回归。...如果数据一共有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天。

2.1K20
领券