前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关于data.table中i, j, by都为数字的理解

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

作者头像
用户7652506
发布2020-10-23 11:45:43
1.2K0
发布2020-10-23 11:45:43
举报
文章被收录于专栏:大猫的R语言课堂

在前面

本期还是由村长来为大家供稿,这期讲一个村长遇到的关于data.table比较有趣的问题,希望大家支持!!

题:i, j, by同时输入数字会怎样?

在往期的公众号文章,都提到了data.table的主要语句DT[i, j, by], 简而言之,i 用来选择或者排序,by 用来分组,j 用来运用函数进行处理。有一天笔者脑子一抽,便有了以下的想法,给i, j, by都加上数字会是什么结果呢?

以mtcars这个R自带的数据集为例,我们知道mtcars[1]的运行结果,是选择这个数据集的第一行,结果如下:

mtcars[1,1]的运行结果,是选择第一行第一列的元素,结果如下:

那么mtcars[1, 1, 1]是什么运行结果呢,可能很多小伙伴都没想过,到底能不能运行出来可能都觉得要打个问号。话不多说,马上运行,结果如下:

看到这个结果大家是不是还有点一头雾水,下面就让笔者来对这个结果进行分析讲解。

题解析

为了弄清楚这个问题,我们根据i, j, by运行的顺序:“先i,再by,最后j”,将i, j, by拆解进行分析

首先,我们单独看i只有一个1的情况下是什么运行结果,为了让运行出来的代码被认定是data.table的格式,我们在j中加入.SD(不清楚.SD用途的小伙伴可以查看data.table的manual,或者查看笔者上一篇推送用data.table语句批量处理变量),代码如下:

mtcars[1, .SD]

运行结果如下:

可见,在DT的i中输入一个数字和用一般的提取符号`[`只输入一个数字的结果完全一样,就是提取这个数据集中的某一行。

接下来,我们在by的位置加上一个1,代码如下:

mtcars[1, .SD, 1]

再来看看运行结果:

这时多了一列变量,变量名缺失,且只有一行观测值为数字“1”。

最后,我们将j中的1添加进去,代码与结果如下:

mtcars[1, 1, 1]

果分析

从这样一段拆解当中,我们大致就可以明白为什么会出现这样的结果了,整体的运行思路就是:首先选出了第一行,而后在by中以一个变量名默认为NA的变量为基准,最后在j中生成了一个默认变量名为V1的变量。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-12-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大猫的R语言课堂 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档