r data.table包_如何在R data.table包中使用.SD

r data.table包

对于某些data.table用户,“ dot-SD”有点神秘。 但是data.table的创建者Matt Dowle告诉我,它实际上非常简单:只需将其视为代表“每个组”的符号即可。 让我们来看几个例子。

我有一个来自波士顿地区自行车共享系统的每日自行车旅行数据集。 如果您想继续,可以从本文底部的链接下载CSV文件。

我将加载data.table并使用data.table的fread()函数导入CSV文件。 在下面的代码中,我将数据保存到名为mydt的数据表中。

library(data.table)
mydt <- fread("daily_cycling_trips_by_usertype.csv")

接下来,我建议使用head(mydt)打印前六行,以查看数据的外观。 您会看到数据中包含日期,用户类型(订户或单程客户),行程数,年份和月份开始日期的列,以按月汇总。

Matt建议的第一个示例:打印按用户类型分组的数据表的前几行。 (我们正在过滤前12行,只是为了更容易看到输出)。

mydt[1:12, print(.SD), by = usertype]

print()遍历每个组,并分别打印两次,每种用户类型一次。 但是,问题是我不知道哪个是客户用户组,哪个是订户用户组。 “ by”列没有打印出来。 幸运的是,Matt向我展示了一个小技巧。

如果您熟悉mydt[i, j, by] data.table语法,则在数据表名称后的括号符号中包含三部分: ijbyi是用于过滤行, j是你想做的事,和by是你想怎么组数据。

例如:

mydt[1:12, { print(.SD) }, by = usertype]

在上面的代码行中,我只是在j部分周围加上了花括号。 这将使我j参数中添加多个R表达式。 现在,它仍然与以前相同:没有用户类型名称。

但是在下一行代码中,请看我添加的R语句(好吧,Matt告诉我添加): print(.BY)

mydt[1:12, { print(.BY); print(.SD) }, by = usertype]

.BY是一个特殊的data.table符号,其中包含by的值–我要对哪个或哪些列进行分组。

如果运行此代码,则将具有每个分组变量的名称以及打印输出。

使用data.table和.SD按组打印的结果 沙龙·马克斯(IDG)

使用data.table和.SD按组进行打印的结果。

这是一个非常基本的例子。 我猜测您可能想对.SD做一些比打印更有趣的事情。 接下来,让我们看一下按组汇总数据,计算出今年每个月哪一天旅行次数最多。

这行代码包含所有内容:

mydt[Year == "2019", .SD[which.max(Trips)], by = MonthStarting]

括号过滤器中的i第一个参数过滤年份为2019的任何行j参数是.SD的有趣部分。 可以将.SD看作是指您的每组数据。 或者像马特说,“你这样做j通过by 。 就像一个for循环。”

如果要查看每个月和每个用户类型的最大值,该怎么办? 只需在by (third)参数中添加另一列即可:

mydt[Year == "2019", .SD[which.max(Trips)],
by = .(MonthStarting, usertype)]

有多种方法可以表示按data.table中的多个列进行分组。 一种方法是在无引号的列名称前加上点号,如上所述。 另一种方法是使用list而不是点,例如:

mydt[Year == "2019", .SD[which.max(Trips)],
by = list(MonthStarting, usertype)]

您还可以使用传统的基R向量,并在每个列名称前后加上引号。

mydt[Year == "2019", .SD[which.max(Trips)],
by = c("MonthStarting", "usertype")]

有关R的更多技巧,请访问InfoWorld上“用R做更多”视频页面,或查看YouTube播放列表“用R做更多”

下载
CSV文件随附我的“如何在R data.table包中使用.SD”文章和视频Sharon Machlis

希望下次见!

翻译自: https://www.infoworld.com/article/3408908/how-to-use-sd-in-the-r-datatable-package.html

r data.table包

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值