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

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

R语言作为专业统计计算语言,数据处理是其一大特色功能,事实每一个处理任务R语言中都有着不止一套解决方案(这通常也是初学者入门R语言时,感觉内容太多无从下手原因),当然这些不同方案确实存在着性能和效率绝大差异...你用会写for/while循环,就不太愿意去掌握apply组函数,甚至那些性能逆天并行算运算包;刚开始会用基础字符串处理,看到stringr包就面临着技能工具更新问题…… 太多选择,让人眼花缭乱,...当整列和聚合单值同时输出时,可以支持自动补齐操作。 当聚合函数data.table分组参数一起使用时,data.table真正威力才逐渐显露。 mydata[,....如果想要运行同时进行输出则可以结尾加上[] setorder(mydata,carrier,-arr_delay)[] ? 这个功能有点儿类似于基础函数中,语句外部加上圆括号。...以上语法加入了新参数.SDcols和.SD,咋一看摸不着头脑,其实是在按照carrier,origin,dest三个维度分组基础,对每个子块特定列进行均值运算。

3.6K80

滚动回归中调用多核CPU

这个运算在大猫i7 3.5G+32G+1T SSD地球人似乎要永远运行下去,于是大猫只得乖乖停止进程思考提高运算效率办法。...众所周知,绝大多数数据清洗任务都只能单线程运行,不论是Rdata.table包还是SASdata步都是如此,唯一存在提高空间就是多次重复回归拟合进行并行计算。...如果你CPU没有超线程,直接根据核心数设置即可 # 大猫机器,核心数从4提高到8只带来小幅提高 cl <= makeCluster(8) # 注册你并行计算集群 # 过程中有可能弹出Windows...这个参数值必须是一个函数,这个函数用来对最终foreach生成list进行处理,文中我们设置值为 rbindlist,也即我们要求doParallel将最终输出list合并成一个data.table...毕竟对于并行计算来说,无论是CPU多核还是AMDCrossfire或者NvidiaSLI,都不可能达到1+1=2效果。doParalle大猫四核CPU时间节约了2/3,大猫已经很开心啦。

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

keras 自定义loss损失函数,sampleloss加权和metric详解

中自定义metric非常简单,需要用y_pred和y_true作为自定义metric函数输入参数 点击查看metric设置 注意事项: 1. keras中定义loss,返回是batch_size长度...为了能够将自定义loss保存到model, 以及可以之后能够顺利load model, 需要把自定义loss拷贝到keras.losses.py 源代码文件下,否则运行时找不到相关信息,keras会报错...每次梯度更新样本数。如果未指定,默认为 32。 epochs: 整数。训练模型迭代轮次。一个轮次是整个 x 和 y 一轮迭代。...例如,一个 epoch 最后一个 batch 往往比其他 batch 要小, 如果数据集尺寸不能被 batch size 整除。 生成器将无限地在数据集循环。...loss损失函数,sampleloss加权和metric详解就是小编分享给大家全部内容了,希望能给大家一个参考。

4K20

R语言高级数据结构data.table

对于data.frame大家应该很熟悉,它可以存储不同数据类型向量数据。今天给大家介绍一个升级版data.frame,其不仅可以存储不同数据类型还可以进行多列并行运算。...首先看下此格式数据生成: fread 自带读入数据函数,可以直接将txt,csv读入并生成相应data.table格式数据。...3. data.table中数据函数调用以及并行运算加入: DT[,sum(y)] DT[,.(sum(y),sum(v))] ? 4. 自定义函数执行,需要用{}包裹所有的命令。...分组计算运算,可以单列分组也可以多列分组: DT[,.(sum=sum(y)),by=x] DT[,.(sum=sum(v)),by=.(x,y)] ? 6....各分组计数函数.N,例: DT[,.N,by=x] 7. 其中数据各列增加,删除,修改,用到函数是:=。 DT[,y1:=y] DT[,y:=NULL] DT[,y:=(y+1)] ?

2.1K30

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

包括两个方面,一方面是写快,代码简洁,只要一行命令就可以完成诸多任务,另一方面是处理快,内部处理步骤进行了程序优化,使用多线程,甚至很多函数是使用C写,大大加快数据运行速度。...比:=还快,通常和循环配合使用 至于这个操作究竟有多快,可以看一下(参照官方manual命令),另外个人觉得最牛三个函数是set(),fread,和fwrite fread fread(input..., by=x][order(x)] #和上面一样,采取data.table链接符合表达式 DT[v>1, sum(y), by=v] #对v列进行分组后,取各组中v>1行出来,各组分别对定义行中...y求和 DT[, .N, by=x] #用by对DT 用x分组后,取每个分组总行数 DT[, .SD, .SDcols=x:y] #用.SDcols 定义SubDadaColums(子列数据),这里取出...函数画图,对于每个x分组画一张图 DT[, m:=mean(v), by=x] #对DT按x列分组,直接在DT再添加一列m,m内容是mean(v),直接修改并且不输出到屏幕 DT[, m:=mean

5.6K20

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

因此对于不是非常巨大文件,建议设置为1,不要使用全部核心 fread中sep是自动检测   所以循环读入文件过程中,就算不同文件分隔符不同,也可以循环一次性方便读入; 还有就算后续改变了文件分隔符...as.data.table函数中同样有一个rownames参数,设置为T可以将行名保留下来作为data.table一列 不建议set和for循环一起使用   虽然set可以在内存直接改变数值,但在R...中用for循环比批量列运算慢多,因此首选:=或者apply等 处理浮点数时会有一些准确性问题   比如用seq函数numeric类型数值时,会存在不准确问题,比如seq(0,1,by=0.2)...现在只发现seq函数会出现这种情况,manual中提供了一个函数解决这个问题,setNumericRounding(2) ,去除最后两个字节,这样运行更快,也不会出现0.6不等于0.6问题 支持数据框取交集和并集...分隔,分割成c1,c2两列 支持类似于SQLs分组运算   带有rollup, cube, groupingsets函数 参考资料 data.table 1.11.2 manual:https://cran.r-project.org

1.5K10

Matt Dowle 演讲节选(二)

2004年第一天,Matt 离开了所罗门兄弟,也离开了 S-PLUS。他开始不断尝试,终于用自己方式重写了[.data.frame这个函数,从而让sum(B) R 中也能得以运行。...选择、运算、分组,三个截然不同命令被完美的整合到了DF[i, j, by]语法中,更妙是,一步运算结果可以直接作为下一步输入数据集!...在这个2012年(注意dplyr最早版本2016年!)帖子中,一个用户需要处理以下数据集(这里只显示前6行) ? 他想首先按照gene_id分组,然后分别计算特定变量极值和均值。...这个用户一开始使用lapply和do.call函数,不仅计算时间很长(30 min!),而且代码特别难看: ? 而使用data.table,则简直是一阵春风: ?...2014:data.table现在 fread函数 在演讲最后(演讲2014年),Matt 提到了当时他正在给data.table添加新功能:fast read,也即fread函数

1.1K40

【测评】提高R运行效率若干方法

首先,我们看看最花费时间这段函数: 第一招:用apply函数代替For循环 其实我们知道R里面最能提升效率一个方法就是少用For循环,多用apply,因为R是面向数组语言,apply面向数组遍历...,效率自然要高十倍还多。...第二招:利用函数编译提高效率 既然循环没有问题,那我猜会不会是cor.test这个函数计算花费时间太长了。...第五招:多线程并行运算 经过上面的尝试之后,我们体会到pathway.score这个函数包含数据索引,计算,递归,循环,建表等诸多操作,因此单独使用一种方法可能对总体速度提高不是很明显,因此最好是能同时计算...好消息是万能R提供了现成并行计算包,能够轻松实现多线程计算。

1.1K10

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

网络充斥data.table很好,很棒,性能棒之类,但是从我实际使用来看,就得泼个水,网上博客都是拿一些简单案例数据,但是实际数据结构很复杂情况下,批量操作对于data.table编码来说,...,而data.table是setorder函数,同时降序方式。...DT数据集按照x分组,然后计算v变量和、最小值、最大值。 (2)dplyr函数利用%>%(链式操作)来改进: 链式操作是啥意思呢?...%>%功能是用于实现将一个函数输出传递给下一个函数第一个参数。注意这里,传递给下一个函数第一个参数,然后就不用写第一个参数了。dplyr分组求和过程中,还是挺有用。...—————————————————————— 实战一:data.table如何选中列,如何循环提取、操作data.table列?

7.4K43

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

2.aggregate函数不能对分组数据进行多种汇总计算,因此要用两句代码分别实现sum和max算法,最后再用cbind拼合。显然,上述代码性能和易用性存在不足。...3.Lapply函数也不支持多种统计方法,因此也要用两句代码分别实现sum和max算法,最后再用cbind拼合。另外,本算法还要额外用到split函数,因此易用性没有改进,反而是更差了。...总结: 本算法性能上有所提高,但在易用性上明显不足,代码写法、业务逻辑、计算结果仍然存在不一致。...tapply 只对单字段分组适用,进行双字段联合分组时其结果为二维矩阵,用户还需要进行复杂处理才行,比如 tapply(orders$AMOUNT, orders[,c("SELLERID","CLIENT...data.table语法简洁,并且只需一行代码就可以完成很多事情。进一步地,data.table某些情况下执行效率更高。

20.5K32

一行代码搞定分组回归

写 在前面 目前为止所有小伙伴们向大猫请教过R问题中,大猫总结了最常遇见同时也是比较难三个问题,分别是(1)事件研究法;(2)分组回归;(3)滚动回归。...事件研究法第一期中已经讲述,本期我们就来瞧瞧如何做分组回归~ PS:由于微信限制,给大猫留言小伙伴超过48小时后大猫就不能回复你们了。所以如果想联系大猫,可以按照文章最后微信号加大猫微信哦。...keyby语句为data.table包中分组语句,它能够对keyby中每一个不同值(这里为abcde)都分别跑一次回归。...具体而言,如果此时keyby语句循环到'a',那么.SD就表示原数据集中所有stkid == 'a'行。在这里,.SD用来作为回归函数lm输入数据集。 coef函数用来提取回归系数。...整行代码关键as.list函数。我们先看看如果不加as.list结果会是怎样: ? 小伙伴们会发现此时每个组都有两行观测,其实他们分别对应着回归intercept和coefficient。

3.4K40

从一件数据清洗小事说起

” 本期“大猫R语言公众号”由“村长”供稿。村长,数据科学、指弹吉他及录音工程爱好者,浙大金融学博士在读,data.table包和MongoDB使用上有较多经验。...:图一为大佬代码运行时间,图二为笔者代码运行时间 ?...实际,for循环“只会在不恰当使用时”降低性能。 然而大佬毕竟是大佬,用科学态度做了实验并给出了结论: ?...其实这一期这么扯淡讲这么多事情,只是为了说明一点,data.table真的有很好性能,尤其处理海量数据方面(分组特别多时候,相比dplyr和pandas有2x~10x提升,来自官方文档)。...相较之下,data.table则通过把数据处理中最常见“选取行”、“修改列”、“分组”三大操作通过dt[i,j,by]语法统一了一起来。

66910

128-R茶话会21-R读取及处理大数据

毫无疑问指向data.table 包中fread。 它有两个优点: 效率飞速,自带多线程操作; data.table 格式很好地节约内存。 可是,300多G 对我来说还是有些大了。...1.1-逐行读取数据 使用命令readLines,该函数通过与文件建立某种连接,并设置参数n控制每次读取行数。...通过设置循环,每次固定读取一定行数文件,并设置循环退出条件为读取结果为零即可: while( TRUE ){ # read genotype tmp <- readLines(genotype.file...而如snowfall 等并行处理包,似乎无法处理readLines 这种文件链接,测试中,每次并行循环都会重建链接,也就是若干个前N 行文件。 1.2-将数据拆分 那么该如何来并行呢?...2-优化处理过程 首先,我矩阵是从数据框得到,而它们读入时被定义为了字符串型,我需要对他们使用转型。 使用apply?来点多线程,mapply? no,no,no。

40020

理解并行计算:r future为什么会启动比workers多得多线程?

rfuture包提供了一种实现多线程并行计算接口,但有时候使用时,我发现r启动了比我设定多得多计算资源。...( mean = mean(x$v1), sd = sd(x$v1) ) }) rv 上面我启用了10个线程(workers)对数据进行处理,但实际运行时候CPU资源图可以会类似下面这样...问题核心在于R很多包或者底层库在你不知道情况下启动了并行计算,例如data.table。...举一个例子就是,如果你指定了4个worker,你只想使用4个CPU核心计算,但如果并行计算内容函数使用了像data.table操作,而默认情况下data.table为了加速计算会使用系统全部核心数目...如@mxblsdl展示例子,就可以手动进行设定解决这样问题,即并行计算函数开头设定仅只使用单线程(这样就变成了 4x1 = 4)。

95520

For循环与向量化(Vectorization)

除此之外,能否有其他思路? ” 解决方法 For循环 首先我们用R语言最底层For循环进行函数编写。...我们定义向量长度为10000,重复运行1000次,测定计算其运行中位数时长(为了防止极值对结果影响)。...关于For循环和Vectorization深入思考 Vectorization更多包拓展 现在有很多R包会对底层一些函数进行优化,也即是对向量化进一步优化,我们选择效率较为强大data.table...通过运行结果可以发现,Rcpp调用底层循环略优于data.table向量化,运行时间0.03s左右。...总结 通过上面的运行效率排序可以发现: 我们也可以总结出以下两点: R语言中一般意义数据操作,能够向量化尽量进行向量化,For循环尽量避免使用。

1.8K30

R练习50题 - 第二期

等不及想先睹为快同学,请猛戳这里: “ github.com/Ravin515/r-data-practice ” 另外,感谢frankzhangyd同学Github建议! ?...由于股票代码symbol最后两个字符表示交易所(例如,600123.SH表示上海交易所,股票代码600123),我们在建立分组变量时需要使用str_sub函数截取最后两个字符。 代码及解析: ?...练习 4 沪深300成分股中,每天上涨、下跌股票各有多少? 分析: 本题仍旧是Ex-2拓展,只不过要求我们进行行选择操作。data.tabledt[i,j,by]语法中,i代表行选择操作。...data.table只会选择为True那些元素。 data.tabledt[i, j, by]语法中,先执行行选择操作i, 再执行分组操作by, 最后执行列操作j。...注意以上运算结果是一个取值为True或False向量,data.table最终会挑选出为True那些行。 我们仍旧使用ifelse函数生成updown这个变量。

85220

关于data.table中i, j, by都为数字理解

往期公众号文章,都提到了data.table主要语句DT[i, j, by], 简而言之,i 用来选择或者排序,by 用来分组,j 用来运用函数进行处理。...首先,我们单独看i只有一个1情况下是什么运行结果,为了让运行出来代码被认定是data.table格式,我们j中加入.SD(不清楚.SD用途小伙伴可以查看data.tablemanual,或者查看笔者一篇推送用...data.table语句批量处理变量),代码如下: mtcars[1, .SD] 运行结果如下: ?...接下来,我们by位置加上一个1,代码如下: mtcars[1, .SD, 1] 再来看看运行结果: ? 这时多了一列变量,变量名缺失,且只有一行观测值为数字“1”。...结 果分析 从这样一段拆解当中,我们大致就可以明白为什么会出现这样结果了,整体运行思路就是:首先选出了第一行,而后by中以一个变量名默认为NA变量为基准,最后j中生成了一个默认变量名为V1变量

1.2K30
领券