R - 来自子集列的数据表记录的顺序

时间:2016-09-09 19:02:46

标签: r data.table subset

我目前正在学习R.中的data.table一些令我困惑的问题:

  1. 子集化列是否始终保留记录的顺序? (即第1,2,3行将保留为第1,2,3行,而不是第1,3,2行)

    此外,相同的结论是否适用于不同的表达方式,例如DB[[1]], DB$V1等。

  2. 2。 在对多列进行子集化时,我知道我需要使用类似DB[,.(V1, V2)],的内容,但我对DB[,V1, V2]?

    的结果感到困惑

    代码运行,似乎产生结果,但行与原始表的顺序不同。如果有人能够解释后面的代码意味着什么,那将是很有帮助的。

    非常感谢!

1 个答案:

答案 0 :(得分:0)

我想从小建议开始......如果你在SO上创建与数据处理相关的问题,那么在问题中提供可重现的代码是非常好的,如果不清楚则预期输出。您将获得更多的观众并收集更多优质的解决方案。这通常是标记的常见做法。

  1. 子集保留顺序,数据的底层存储是面向列的,与常规SQL db(不知道行顺序)不同,它与基本R中的向量子集完全相同,速度更快。 /> 关于[[$,这些只是从data.table提取列的方法,一般是list,您可以使用DB[[1]],{{1 },DB[["V1"]]。它们的行为会有所不同,具体取决于列/列表元素是否存在。

  2. data.table DB$V1运算符内的第三个参数是[,它期望列分组,因此您可以查询按V2分组的列V1,而不使用任何聚合函数。这与byDB[, .(V1, V2)]DB[, c("V1","V2"), with=FALSE]DB[, list(V1,V2)],......非常不同。大多数api都是从基础R借来的,像DB[, .SD, .SDcols=c("V1","V2")]subset()这样的函数。

  3. 最后,我建议您浏览一下data.table vignettes,还有我最近的长篇文章,其中包含各种数据。示例:Boost Your Data Munging with R