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

一行代码对日期插值

在分析时,我们为了获得完整的时间序列就需要“插入”那些丢失的日期。 举一个例子: ? 这个数据集中有5行观测,2组分类(id等于1和2)。...我们看到每个id对应的date都是有缺失的,例如从2001-01-09直接跳到了2001-01-12,当中少了10号和11号。 如何只用一行代码就高效优美地把这些缺失的日期补上呢?...在merge的过程中,我们指定id和date变量必须匹配,也即on = .(id, date)语句的作用: # 把CJ函数merge回原始数据集 dt[CJ, on = ....例如,在我们的样例数据集sample中,id=1的观测对应的日期最小值的为01-08,最大值为01-14,而我们希望填充这两个日期“之间”的所有值。...思路和情况1类似,我们先构造CJ数据集,只不过在这里我们seq函数的起讫点不再是固定值,而是每个id对应日期的最大值与最小值: # 建立完整的日期序列 # 注意min和max函数的作用 CJ <- dt

1.4K30

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

提 出问题 话说有个擅长使用SQL的小伙伴在StackOverflow上提出了这样一个问题,他说,Gaps & Islands问题在SQL中能很容易解决,那么在R中也能高效解决吗?...(生成样例数据集的代码附在见文末) 解 题思路 在解决本问题的过程中我们需要用到data.table包!...顾名思义,它记录了每个ID中结束时间的累计最大值: ▶ dat[, etime.max := as.POSIXct(cummax(as.numeric(etime)), origin = '1970-01...上一行代码中,使用的关键函数是累计最大值函数cummax。此外,由于cummax不能直接处理日期格式,所以需要先将日期转化为数字进行比较,完了再转换回日期。...关于如何巧用cumsum函数,大猫在上一期的《R Tricks:如何巧为分组观测编号》中也有详细讲解哦 最后,我们只要把每个grp组中起始时间(stime)的最小值和结束时间(etime)的最大值找出来就行啦

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

    R练习50题 - 第一期

    写在前面 从这期开始,大猫课堂将会推出一个新的系列:R练习50题,目的是使用50道练习题让大家掌握常用的数据操作,例如寻找每组最大的N个观测等。...虽然具有明显的金融背景,但是它和其他学科所遇到的数据集是相通的:在我们的数据集中,每个股票代码symbol和日期date的组合都决定了唯一的一个观测,相当于数据集的key,这种由“横截面”与“时间序列”...值得说明的有一下几点: 数据集为“面板数据”:包含多个股票(横截面),而每个股票则有多个按照日期排序的变量(时间序列) 股票代码symbol 和日期date共同组成了数据集的key,也即每个唯一的symbol...unique:找出symbol中不重复的值。 在data.table的语法中,先进行列选择操作,再对列进行处理。所以上述语句会先执行str_detect,再执行unique。...代码第二行生成了一个新变量num。由于在keyby语句中我们已经按照日期与涨跌进行了分组,所以这一步我们只需要统计每个组有多少个股票就可以了。我们在这里使用了uniqueN这个函数。

    2.5K40

    R语言:哪个函数解析时间最快?

    写在前面 本期依旧由村长为大家供稿,主要讲述R语言在时间格式处理中的很多问题。...问题提出 把“以字符格式存储”(chr)的时间日期数据解析成R中的时间日期(Date,POSIXct, POSIXlt...)格式是一项非常常见的工作。...把字符形式的时间转换成专门的时间格式的优点有: 1 排序安全 例如我们有两个以字符存储的时间“2018-8-3”和“2018-12-2”,虽然“2018-8-3”显然比“2018-12-2”小,但是在R...举个例子,如果用ASCII编码字符“2019-01-19”,里面有10个字符,每个字符占用8 bit,那么一共要用80 bit,但是在R的“Date”格式中,这个日期实际上用整数“17951”代表(R中的代码是...非常简单,只有两列变量“id”和“date”,其中date是字符格式,从“0001-01-01”开始逐日递增一直到“2738-11-28”,共有100万行。

    1.5K50

    R练习50题 - 第六期

    这一题主要考察排序和选择的综合使用。 首先对date和index_w300分别进行升序和降序排列,也即是先将日期升序排列,而后在每一天中将沪深300的各支股票以成分占比降序排列;接下来利用by = ....接下来以日期date和行业industry进行分组,最后在每组中以amount最大值除以amount最小值:times = amount[1]/amount[.N]。...注:在此处有一个data.table的小技巧,i中的排序和选择的操作的在代码中分成了两步,这是因为这两个部分不能够以order(date, industry, -amount) & amount > 0...首先根据date和industry进行分组,而后在分组的.SD中选择每天成交额超过该行业中股票成交额80%分位数的股票:.SD[amount > quantile(amount, 0.8)],这样就将每日每个行业中超过本行业...line 3 接下来根据日期date和标识tag,计算三个分组在每日的平均收益率ret_aver。

    55650

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

    注意,本代码主要使用data.table完成,关于data.table包的相应知识会在涉及的时候进行讲解。在以后的课堂中,我们会重点介绍data.table这个包。 ?...在这里,我们姑且用最简单的市场模型来估计收益,即: r = alpha + beta * (r - rm) 其中,r 表示个股每日的收益率,rm 表示对应日期市场指数的收益率。...其中,stk.id表示股票代码,date是日期,r表示个股收益率,rm表示市场收益率,event.flg是事件日标识。如果当天不是事件日,event.flg为0,否则为1。...例如在我们的例子中,第30天发生了事件,因而n=30。需要注意的是在我们的例子中 n 是一个标量,下节课中我们会把n拓展为向量,也即引入多个事件日。...要知道在R中,线性回归的结果是一个类名为“lm”的对象,这个对象包含了回归结果的系数、p值、残差等等元素。而coef()函数的作用就是提取回归结果的系数。 最后看第三行。

    93920

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

    R语言作为专业的统计计算语言,数据处理是其一大特色功能,事实上每一个处理任务在R语言中都有着不止一套解决方案(这通常也是初学者在入门R语言时,感觉内容太多无从下手的原因),当然这些不同方案确实存在着性能和效率的绝大差异...合理选择一套自己的数据处理工具组合算是挺艰难的选择,因为这个涉及到使用习惯和迁移成本的问题,比如你先熟知了R语言的基础绘图系统,在没有强大的驱动力的情况下,你可能不太愿意画大把时间去研究ggplot2,...然后根据自己掌握的现状选择最熟练的一套,随着时间的推移慢慢发现现有工具组合的不足,开始尝试往更加高效、简介的工具迁移,这样以需求为推动力的技能升级和迁移更为彻底和明确。...DT[i,j,by] 如果这个过程是SQL中是由select …… from …… where …… groupby …… having 来完成的,在R的其他基础包中起码也是分批次完成的。...以上语法加入了新的参数.SDcols和.SD,咋一看摸不着头脑,其实是在按照carrier,origin,dest三个维度分组的基础上,对每个子块特定列进行均值运算。

    3.6K80

    CSV数据读取,性能最高多出R、Python 22倍

    单线程CSV.jl是没有多线程的Pandas(Python)的1.5倍,而多线程的CSV.jl可以达到11倍。 字符串数据集 I 此数据集在且具有1000k行和20列,并且所有列中不存在缺失值。 ?...单线程中,CSV.jl比R快1.2倍,而多线程相比,CSV.jl则快约5倍。 苹果股价数据集 该数据集包含50000k行和5列,大小为2.5GB。这些是AAPL股票的开盘价、最高价、最低价和收盘价。...价格的四个列是浮点值,并且有一个列是日期。 ? 单线程CSV.jl比从data.table中读取的R速度快约1.5倍。 而多线程,CSV.jl的速度提高了约22倍!...单线程中,CSV.jl比R快2倍,而使用10个线程则快了10倍。 按揭贷款风险数据集 从Kaggle取得的按揭贷款风险数据集是一种混合型的数据集,具有356k行和2190列。...在Julia,Python和R的测试中,引发了网友们更多关于“技术更新”的热烈讨论。

    2K63

    8种ETL算法归纳总结,看完这些你就全明白了

    > 算法实现逻辑 利用PK主键比对; 目标表和源表PK一致的变化记录,更新目标表; 源表存在但目标表不存在,直接插入; > ETL代码原型 -- 1....闭链日期可以快速提取对应日期有效数据; 对于跟踪源系统非事件流水类表数据,拉链算法发挥越大作用,源业务系统通常每日变化数据有限,通过拉链加工可以大大降低每日打快照带来的空间开销,且不损失数据变化历史;...**,开始时间,结束日期) Select 不含开闭链字段***,开始时间,date'日期>' From ; -- 6 插入开链数据,即当日新增记录 INSERT INTO...插入全新开链数据 INSERT INTO (不含开闭链字段***,开始时间,结束日期) SELECT 不含开闭链字段***,date'日期>',date'日期>' FROM...,所有数据表通常还会包含一些控制字段,即插入日期、更新日期、更新源头字段,这样对于数据变化敏感的数据仓库,可以进一步追踪数据变化历史; 2.ETL算法本身是为了更好服务于数据加工过程,实际业务实现过程中

    1.6K20

    R练习50题 - 第八期

    此题主要计算每天的行业收益率ind_ret和市场收益率mkt_ret。 line 1 计算每只股票每天的收益率stkcd_ret和每个行业中各股票的流通市值权重ind_weight。...与Ex-30类似,此题最大的不同在于需要以行业industry和日期date,分组计算每个行业的收益率ind_ret和市场收益率mkt_ret。具体可参考R练习50题 - 第七期!...此题的关键点和难点在于,如何识别出连续三个交易日上涨和下跌。由于牵涉到行处理,所以最好的方法是在data.table语句中进行循环。...接下来,从第一行到最后一行,设定一个循环的t值,由于是判断最近连续3个交易日是否涨跌,那么就从每只股票的第4个交易日t+3开始计算,因而有l[[t+3]]和date[t+3];而后计算b1和b2最近三天的均值...is.na(date)去除date为NA的观测,因为当循环到.N-2时,r3day_up和r3day_dn还能生成观测,但date已无法生成观测,超出了循环的日期范围,故而会出现NA的情况;接下里在by

    39610

    Pandas 学习手册中文第二版:11~15

    实体往往代表现实世界中的事物,例如一个人,或者在物联网中,是一个传感器。 然后,使用单个数据帧对每个特定实体及其度量进行建模。 通常需要在模型中的实体上和实体之间执行各种任务。...然后,它为每组匹配的标签在结果​​中创建一行。 然后,它将来自每个源对象的那些匹配行中的数据复制到结果的相应行和列中。 它将新的Int64Index分配给结果。 合并中的连接可以使用多个列中的值。...为此,您可以为轴的每个值执行选择,但这是重复的代码,并且在不更改代码的情况下无法处理将新的轴值插入DataFrame的情况。 更好的表示方式是,列代表唯一的变量值。...,并将它们旋转到新DataFrame上的列中,同时为原始DataFrame的适当行和列中的新列填充了值。...这些通常是确定两个日期之间的持续时间或从另一个日期和/或时间开始的特定时间间隔内计算日期的结果。

    3.4K20

    journalctl命令

    --no-tail: 显示所有存储的输出行,即使在follow模式下也是如此,撤消--line=的效果。 -r, --reverse: 反转输出,以便首先显示最新的条目。...ID,则正偏移量将查找从日志开始的引导,而等于或小于零的偏移量将查找从日志结束的引导,因此,1表示按时间顺序在日志中找到的第一个引导,2表示第二个引导,依此类推,而-0表示最后一个引导,-1表示最后一个引导之前的引导...(值更低优先级更高)日志级别的所有消息,如果指定了一个范围,则将显示该范围内的所有消息,包括该范围的开始值和结束值,这将为指定的优先级添加PRIORITY=匹配项。...--new-id128: 生成一个新的适合标识消息的128位ID,而不是显示日志内容,这是为那些需要为他们引入的新消息使用新标识符并希望使其可识别的开发人员准备的,这将以三种不同的格式打印新的ID,这些格式可以复制到源代码或类似的文件中...--dump-catalog [128-bit-ID...]: 显示消息目录的内容,条目由由两个破折号和ID组成的行分隔,格式与.catalog文件相同,如果指定了任何128位id,则只显示那些条目。

    3.6K20

    案例:用Excel对会员客户交易数据进行RFM分析

    选择数据区域,确认所有的数据都被选择 选择在“新工作表”中插入数据,然后点击“确定” 将“客户编号”拖入“行标签”栏 将“收银时间”、“记录ID”、“交易金额”拖入数值计算栏 点击“收银时间”数值计算栏按钮...”中选择“平均值”,然后“确定” 在“记录ID”数值计算按钮栏,选择“值字段设置” 在“计算类型”中选择“计数”,然后“确定” 在透视表顶部筛选项“销售类型”处,点击下拉按钮小角标,在“选择多项”前的小方框中打勾...ctrl键,继续按住shift键,按一次向上箭头,取消数据最后一行的汇总数据】 点击“开始”菜单栏下快捷按钮栏上的“粘帖”按钮下方的下拉箭头,选择“选择性粘帖”,在对话框中勾选“减”,然后“确定” 在不取消目前选择的情况下...在D1单元格中输入-1 然后ctrl^C复制D1单元格中的值(-1) 然后选中B5:B1204【快捷操作同上】 “开始”-“粘帖”下拉按钮-“选择性粘帖”-在计算部分选择“乘”,然后点击“确定” 最后得到...到此,我们得到R,F,M针对每个客户编号的值 第三步:数据分析 R-score, F-score, M-score的值,为了对客户根据R,F,M进行三等分,我们需要计算数据的极差(最大值和最小值的差),

    2.4K50

    R练习50题 - 第二期

    练习 4 沪深300成分股中,每天上涨、下跌的股票各有多少? 分析: 本题仍旧是Ex-2的拓展,只不过要求我们进行行选择操作。在data.table的dt[i,j,by]语法中,i代表行选择操作。...data.table只会选择为True的那些元素。 在data.table的dt[i, j, by]语法中,先执行行选择操作i, 再执行分组操作by, 最后执行列操作j。...我们只需要按照date和industry进行分组,然后统计每个subgroup的个数即可。 代码及解析: ? 我们生成一个新的变量stk_num用来表示每天每个行业的股票数。...习题 7 每天涨幅超过5%、跌幅超过5%的股票各有多少? 分析: 这一题的关键思路还是Ex-2中的分组。首先,我们自然要对日期分组,然后按照updown进行分组。...注意以上运算的结果是一个取值为True或False的向量,data.table最终会挑选出为True的那些行。 我们仍旧使用ifelse函数生成updown这个变量。

    88820

    软件工程 怎样建立甘特图

    时间刻度始于您指定的开始日期,止于您指定的完成日期。当您添加任务的开始日期和结束日期或工期时,任务栏将出现在时间刻度下面的区域中,且该区域将展开。...要创建新的任务行,请拖动位于框架底部中央的绿色选择手柄。 在两个现有任务之间添加新任务 右键单击要在其上方显示新任务行的行中的任意单元格,然后单击快捷菜单中的“新建任务”。...右键单击其中一个选定的任务,然后单击快捷菜单中的“降级”。 设置摘要任务的工期 在表示第一个附属任务的行中,单击“开始时间”列中的单元格,然后键入该任务的开始日期。...目的 采取的操作 更改开始日期和/或结束日期 在甘特图中,右键单击时间刻度中的任何部分,然后单击快捷菜单中的“日期选项”。...在“时间刻度范围”下,选择新的开始日期/时间或结束日期/时间,然后单击“确定”。 更改时间单位 在甘特图中,右键单击时间刻度中的任何部分,然后单击快捷菜单中的“日期选项”。

    5.1K20

    SQL系列(二)最常见的业务实战

    计算每日练习次数、练习新用户数(以前未做过练习,今日开始做练习算作今日的练习新用户)、累积练习次数(每月单独汇总)、累积占比(每月单独汇总) 每日练习次数排名前三的试卷ID 知识点:三大窗口函数的应用...只需在1的基础上构造出每日练习新试卷用户数据即可 -- 优化1的逻辑,减少嵌套 select count(distinct if(max_continue_nums>=5,uid,null))...日常业务需求的经验沉淀告诉我们,每个需求都需要明确主要信息,附加信息以left join的形式增加到主表,构造一张大明细表(明细表中含维度和度量,维度在前,度量在后),在此基础上按所需维度向上汇总。...精简子查询 从上面的例子也能发现,Hive与MySQL在语法习惯上有不同。MySQL习惯于先关联再整体上筛选条件和字段,但在Hive中,习惯构造好一个个的子查询,然后再关联。...简单的一句话:当你知道如何最正确的使用count()和count(distinct)时,你的逻辑就是清晰的。 最后,给大伙出道简单的综合题吧:给定起始值和结束值(均为整数),构造步长为1的等差数组。

    3K20

    数据仓库中如何创建拉链表?

    某些表(如用户表)中的数据每日既有可能新增,也有可能修改,但修改频率并不高,属于缓慢变化维度,此处采用拉链表存储(用户维度)数据。 1 什么是拉链表 ? 2 如何做拉链表 ? ? ?...(1)如何获得每日变动表   a.最好表内有创建时间和变动时间(Lucky!)   ....要求业务数据库提供变动流水 (2)假设已经存在新增变动明细表(ods_order_info)   数据库中新增2020-03-11这一天的数据 步骤2:先合并变动信息,再追加新增信息,插入到临时表中...'9999-99-99' end_date开始结束日期 select id, name, birthday, gender,...(T+1任务) --否则依旧为用户表结束日期('9999-99-99'),其它可能发生变化的字段也类似如此处理 if(ui.id is not null and uh.end_date

    1.2K10

    Pandas DateTime 超强总结

    基本上是为分析金融时间序列数据而开发的,并为处理时间、日期和时间序列数据提供了一整套全面的框架 今天我们来讨论在 Pandas 中处理日期和时间的多个方面,具体包含如下内容: Timestamp 和...DatetimeIndex 对象,一周中的每个日期都是 Timestamp 的一个实例。...以下语句将返回从 2019 年 4 月 3 日到 2019 年 4 月 4 日结束的所有行;开始日期和结束日期都包括在内: display(df.loc['03-04-2019':'04-04-2019...为此,我们首先需要过滤 DataFrame 中服务器 ID 为 100 的行,然后将每小时数据重新采样为每日数据。...我们还可以通过链接 groupby() 和 resample() 方法来查看每个服务器 ID 的相同结果。以下语句返回每个服务器每月的最大 CPU 利用率和可用内存。

    5.6K20

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

    注意 I,本代码主要使用data.table包完成,关于data.table包的相应知识会在涉及的时候进行讲解。在以后的课堂中,我们会重点介绍data.table这个包。...加了这一行代码后,第二行代码中所有的操作都会对每个stk.id分组运行一遍(这一步很关键!)。 讲到这,大家一定会发现,上述代码的关键部分就在大括号{...}所括起来的内容。...我们一行一行来看: ns <- which(event.flg == 1); 这一行代码的作用找到每个股票的所有事件日的序号 ns。大家应该还记得在上一讲中我们用 n 来表示单一事件日的序号吧?...在测试中,大猫设置了一个极端条件:模拟2500个股票(差不多是A股股票数),每个股票拥有1000个交易日的记录(差不多有4年的时间),平均50个交易日出现一个事件(模拟盈利公告这类事件的出现频率)。...注意,此时最终得到的cunsum应该是一个和ars长度相等的向量。 如果我们希望对每个股票的CAR进行T检验,那么代码就为: ttest <- car[, .

    1.2K40
    领券