【发布时间】:2016-01-25 21:07:26
【问题描述】:
我正在追随一位前同事的脚步,我需要处理他正在构建的一些数据。因此,我正在阅读并复制他的代码,以便了解他的所作所为。
但是,我遇到了一个部分,我知道他想要完成什么,但我不明白他的索引。
我通常用循环做类似的工作,所以这是一种我不熟悉的编码方法。
这是行:
IDs <- unique(cummingsOUT$ID)
c2 <- cummingsOUT[, .(Weeks20 = sum(WEEK<21)),by=ID][Weeks20 >= 18]
cummingsOUT <- cummingsOUT[cummingsOUT$ID %in% c2$ID ,]
所以“cummingsOUT”是一个相当大的纵向数据集,包含 300 万个 obs。 431,000 个人的 6 个变量。 6 个变量是 ID(数值)、GRADE(因子)、SCORE(数值)、WEEK(数值)、MEASURE(因子)、DATA(因子)。对于每个人,同一周内可能有多个 SCORE。
此时,该同事被指示仅保留在其个人第 20 周之前具有 18 个或更多 SCORE 的唯一 ID。
我得到的第一行,虽然他最终没有使用 IDS。难倒我的是第二个。
c2 <- cummingsOUT[, .(Weeks20 = sum(WEEK<21)),by=ID][Weeks20 >= 18]
这里发生了什么?他创建了一个对象 c2,并将其设置为所有行的数据集。但是“。”是什么意思?做?有人可以解释 Weeks20 吗?他是否在索引中创建了一个新对象,即对个人的总观察值求和,直到与 WEEK 中的值 20 匹配的数据点?然后他又索引了?
我认为第三行只是匹配到第 20 周被确定为具有 18 个或更多 obs 的 ID。
有人认为他们可以解释发生了什么吗?
【问题讨论】:
-
请阅读this。这是一个非常基本的
data.table语法。 -
以前从未使用过 data.table。感谢您提供的简单链接,它真的很有帮助。
标签: r data.table