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

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

筛选变量的数据,也可以%in%集合运算联用(集合运算见博客:R语言︱集合运算)。...="Hospice"] (3)还有一些复杂结构: dt[a=='B' & c2>3, b:=100] #其他结构 dt数据集中,筛选a变量等于"B",c2变量大于3,同时将添加b变量,数值等于...SD只能在位置j中使用。 .SDcols常于.SD用在一起,他可以指定.SD中所包含的,也就是对.SD取子集。...—————————————————————— 实战一:data.table如何选中,如何循环提取、操作data.table中的?...除了行,就是的问题了。data.table操作,真的是费劲。。。 常规来看, data[,.

7.5K43

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

实际应用场景下,虽然SQL(SQL类专业的etl语言)是数据处理的首选明星语言,性能佳、效率高、容易培养数据思维,但是SQL没法处理构建全流程的数据任务,之后仍然需要借助其他数据分析工具来对接更为深入的分析任务...其实很早就接触过data.table,之所以一直没有深入应用,因为它的理念与其他数据处理包偏离太远,可以说迁移成本很高,几乎就是技能重构而非迁移。...DT[i,j,by] 如果这个过程是SQL中是由select …… from …… where …… groupby …… having 来完成的,R的其他基础包中起码也是分批次完成的。...data.table索引 索引数据框相比操作体验差异比较大,data.table索引摒弃了data.frame时代的向量化参数,而使用list参数进行列索引。...当聚合函数data.table中的分组参数一起使用时,data.table的真正威力才逐渐显露。 mydata[,.

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

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

使用dt_names = names(DT)的时候,修改dt_names会修改原data.table的列名,如果不想被修改,这个时候应copy原data.table,也可以使用dt_names <-...2:4] #除了2到4行剩余的行 DT["a",on="x"] #on 参数,DT[D,on=c("x","y")]取DT上"x","y"列上D上“x"、"y"的相关联的行,D进行merge...on参数的第一必须是DT的第一 DT[.("a"), on="x"] #和上面一样.()有类似c()的作用 DT["a", on=.....N(总数,直接在j输入.N取最后一),:=(直接在data.table上添加,没有copy过程,所以快,有需要的话注意备份),.SD输出子集,.SD[n]输出子集的第n,DT[,....一同使用 which TRUE返回匹配的行号,NA返回不匹配的行号,默认FALSE返回匹配的行 .SDcols 取特定的,然后.SD就包括了页写选定的特定,可以对这些子集应用函数处理 allow.cartesian

5.6K20

data.table语句批量处理变量

村长继续为大家奉上data.table使用案例心得,希望大家能够继续支持村长!!...问 题:批量处理表中变量 正式开始说问题之前,我们先回顾一下data.table的基本语句DT[i, j, by],简而言之,"i"是对行进行选择,"j"是对进行操作,"by"是分组。...我们知道data.table包中,.SD是经过i和by处理之后剩下的那部分数据集,它的格式是一个data.table,同时它是一个list。...而我们要处理的变量是第3个到第34个,所以.SD中选出3至34,运用lapply对选中的.SD[, 3:34]里面每一个element使用as.Date函数。 再看,':='的左边。...如何把处理好的这些变量变量名进行对应,这里就用到了colnames()这个函数,提取出我们这个data.table第3到第34个变量的名字,这样就可以将变量名和更改格式后的变量按顺序进行一一匹配。

1.1K30

R语言:data.table语句批量生成变量

我们在对多标准进行筛选时,之前我们还进行了一步非常重要的提取,也就是将每一观察值提取出某一特定的字段,而后生成一系列变量,这些变量的观测值只可能存在三种情况:醛固酮、继发性醛固酮或者NA。...在这里通过链接中的推送的lapply使用原理,再加上stringr包中str_match这个函数的使用,截取出诊断结果中出现过的继发性醛固酮或者醛固酮,没有出现过的自动记为NA。...代码如下: lapply(.SD[, 2:23], str_match, "继发性醛固酮|醛固酮") := 左边 我们可以再回顾一下,上文链接中用data.table语句批量处理变量的推送中所提到的 ‘...str_c(colnames(clinic)[2:23], "_xtrct") 最后我们把 ':=' 左右两边的代码组合在一起,放入data.table语句的j中就是我们一开始所讲述的代码。...我们大家分享我们的知识和节操,我相信独乐乐不如众乐乐。

1.1K20

懒癌必备-dplyr和data.table让你的数据分析事半功倍

以外的所有 distinct( ) 去重 distinct(df,V1,V2) 根据V1和V2两个条件来进行去重 基础包里面也有一个去重函数unique() ※注意distinct()可以针对某些进行去重...mutate( ) 为数据增加新 mutate(df,vnew1=v1-v2,vnew2=vnew1+v3) 基础包里的transform()函数接近,但mutate可以使用你刚刚创建的column..."B")] 使用j DT[,v1] #选择v1 那如果我要选择多呢,大家注意一下这里不是用c()来选取了, 而是通过.()来选取,注意前面有一个”.”号,所以我说data.table的语法有点奇怪呢...(sum(v1),sd(v3))] data.table居然支持直接在j上进行列的计算,看到这里是不是觉得超牛逼,关键是代码非常简洁,一句话的事,就帮我们完成数据的筛选和计算了! DT[,....(sum_v1=sum(v1),sd_v3=sd(v3))] 还可以直接给计算的赋予名称哦!!功能强大得我都要笑开花了! 使用by 这还只是小试牛刀,你忘了我们还有个by吗!! DT[,.

2.4K70

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

往期的公众号文章,都提到了data.table的主要语句DT[i, j, by], 简而言之,i 用来选择或者排序,by 用来分组,j 用来运用函数进行处理。...首先,我们单独看i只有一个1的情况下是什么运行结果,为了让运行出来的代码被认定是data.table的格式,我们j中加入.SD(不清楚.SD用途的小伙伴可以查看data.table的manual,或者查看笔者上一篇推送用...data.table语句批量处理变量),代码如下: mtcars[1, .SD] 运行结果如下: ?...接下来,我们by的位置加上一个1,代码如下: mtcars[1, .SD, 1] 再来看看运行结果: ? 这时多了一变量,变量名缺失,且只有一行观测值为数字“1”。...最后,我们将j中的1添加进去,代码结果如下: mtcars[1, 1, 1] ?

1.2K30

Mybatis接口上使用注解配置SQL语句以及接口xml一起使用

接口上使用注解配置SQL语句 MyBatis对于大部分的基于XML的映射器元素(包括<select>,<update>)提供了对应的基于注解的配置项。...下面我们通过一个小demo来简单演示一下这些基本注解的使用方式: 我现在有一张student表,表格结构如下: ?...int age; private String sex; private String address; ... getter setter 略 ... } 然后需要写一个接口,该接口的方法上配置注解...我们XML配置文件中可以配置一对多的连接查询,但是需要通过标签设置结果集字段的映射关系。注解里我们没法这么做,因为没有对应的注解支持。...一起使用 通常情况下我们都是将接口XML配置文件混合使用,这样比纯XML或者纯注解的方式要简单一些。

2.4K40

R语言 数据框、矩阵、列表的创建、修改、导出

变量名不需要有"",文件名是真实存在的文件,要有""#直接读取如果失败,需要指定参数#ex1 <- read.table("ex1.txt") #读入该文件后会发现原文件被认为没有列名,列名被当作第一行,字符型数值型在一起会将所有数值型改为字符型以满足向量同一类型...,且列名的.变成了-,R语言将列名的特殊字符-转化了,该编号可能与其他数据中编号无法匹配,ex2 <- read.csv("ex2.csv“",row.names = 1,check.names = F...函数可以避免此前的错误a<-fread("soft.txt",data.table = F)class(a)#但其不会有行名,且其会有一个data.table的数据结构多出来,可以设置data.table...calculate<-function(a){mean(a)+2*sd(a)}calculate(c(1,1,1))calculate(rnorm(10,mean=0,sd=1)) #会出现值不相等的情况...="y.Rdata")class(y)# $不支持矩阵,因此不能在这里使用class(y[,1])mean(as.numeric(y[,1]))#矩阵只允许一种数据类型,单独更改一的数据类型没有意义,

7.6K00

「Workshop」第二期:程序控制数据操作流

涉及编程的数据和代码都会放到 https://github.com/XSLiuLab/Workshop 推荐图书 《R for Data Science》[1] 《R 语言编程指南》 《R 实战》 其他推荐见...num_range starts_with ends_with one_of matches 行筛选 slice, filter, sample_n, sample_frac, top_n, distinct 筛选...is.na()) 位置 mean, meadian 逻辑值 mean, sum 位置 dplyr:: first last nth 排序 quantile min max 分布 IQR mad sd var...拓展表格 expand complete 分割和连接 separate separate_rows unite 数据导出 write_* data.table base 数据导入 fread 数据导出...fwrite data.table 语法 dt[i, j, by] 数据过滤合并等操作 R 基础语法一致,也可以使用 tidyverse 处理 整数索引 逻辑索引 命名索引 进一步的学习参考小抄、

1.5K30

Q&A:melt和dcast之间反复横跳

利用这个函数的目的在于,data.table中进行数据处理贯彻的是向量思维。 这也是R语言和Python语言进行数据处理的底层逻辑。从数据特点的角度来解释,也即是长表优于宽表。...通过使用melt能够达到这一效果,在这里使用了melt中的measure选项,通过patterns进行了关于变量名的正则匹配,将五类同属性变量("^用药名称", "^用法", "^用量", "^服药时间...1片 1年 规律 黄舜 1 盐酸吡格酮(卡司平) 口服 2片qd 1年 规律 这一部分代码极为重要,首先利用rowMeans进行行筛选,为的是将原本就缺失的记录,以及宽表到长表转换中生成的缺失记录进行删除...这就是源于数据的横向纵向记录规则不明确导致的,两个方向都可能会存在缺失值。进行宽表到长表的转化过程中,这样的缺失值同样会保留下来。因此要对数据进行该操作。...,~左边的变量为表更改结构以后体现记录识别唯一性的primary key,~右边的变量为数据变宽之后同类记录的序号variable,value.var中的变量名~右边变量中记录的序号整合在一起生成一系列的同类变量

64520

好强一个Julia!CSV数据读取,性能最高多出R、Python 22倍

之后使用他们分别读取了8个不同真实数据集。 那么,测试的结果又是如何呢?让我们来一起看下。 同构数据集的性能 首先从同构数据集开始进行性能测试。...字符串数据集 I 此数据集且具有1000k行和20,并且所有中不存在缺失值。 ? Pandas需要546毫秒来加载文件。 使用R,添加线程似乎不会导致任何性能提升。...单线程CSV.jl比data.table快2.5倍,而在10个线程中,CSV.jl则大约比data.table快14倍。 字符串数据集 II 该数据集的大小字符串数据集 I 中相同。...但是,使用更多线程,Julia的速度R一样快或稍快。 宽数据集 这是一个相当宽的数据集,具有1000行和20k。数据集包含的数据值类型有:String、Int。 ?...可见,CSV读取方面,Julia完全有能力Python或和R竞争甚至做得更好。 此外,Julia的CSV.jl是独特的。

2K63

R练习50题 - 第六期

这一题主要考察排序和选择的综合使用。 首先对date和index_w300分别进行升序和降序排列,也即是先将日期升序排列,而后每一天中将沪深300的各支股票以成分占比降序排列;接下来利用by = ....注:在此处有一个data.table的小技巧,i中的排序和选择的操作的代码中分成了两步,这是因为这两个部分不能够以order(date, industry, -amount) & amount > 0...这一题的关键在于运用了分组以后的.SD选择,这是一个data.table包的常用技巧。 line 1 计算了个股每日的收益率ret,再将其余需要的变量挑选出来。 line 2 是本题的关键。...首先根据date和industry进行分组,而后分组的.SD中选择每天成交额超过该行业中股票成交额80%分位数的股票:.SD[amount > quantile(amount, 0.8)],这样就将每日每个行业中超过本行业...注:此处作者进行解答时,特意应用了max10%和min10%两个变量名,仅为了说明``的用法,大家一般编写过程中则需尽量避免变量名函数的混用!! ?

53350

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

r的future包提供了一种实现多线程并行计算的接口,但有时候使用时,我发现r启动了比我设定的多得多的计算资源。...( mean = mean(x$v1), sd = sd(x$v1) ) }) rv 上面我启用了10个线程(workers)对数据进行处理,但实际运行的时候CPU的资源图可以会类似下面这样...很久之前我就问过future包的作者,讨论:https://github.com/HenrikBengtsson/future/issues/343 R语言大神任坤做了一段非常好的解释: 理解起来就是...问题的核心在于R很多包或者底层库在你不知道的情况下启动了并行计算,例如data.table。...举一个例子就是,如果你指定了4个worker,你只想使用4个CPU核心计算,但如果并行计算的内容函数使用了像data.table包的操作,而默认情况下data.table为了加速计算会使用系统全部的核心数目

97220

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

因此对于不是非常巨大的文件,建议设置为1,不要使用全部核心 fread中sep是自动检测的   所以循环读入文件的过程中,就算不同文件的分隔符不同,也可以循环一次性方便的读入; 还有就算后续改变了文件的分隔符...  as.matrix作用于data.table时会调用as.matrix.data.table,有一个rownames参数可以指定保留为行名的 矩阵转换成data.table时可以保留列名   ...as.data.table函数中同样有一个rownames参数,设置为T可以将行名保留下来作为data.table的一 不建议set和for循环一起使用   虽然set可以在内存上直接改变数值,但在R...中用for循环比批量运算慢的多,因此首选:=或者apply等 处理浮点数时会有一些准确性的问题   比如用seq函数numeric类型的数值时,会存在不准确的问题,比如seq(0,1,by=0.2)...中的0.6就不等于0.6, 虽然很费解,但这是因为计算机存储浮点数时出现的一些问题。

1.5K10
领券