我目前正在学习R.中的data.table一些令我困惑的问题:
子集化列是否始终保留记录的顺序? (即第1,2,3行将保留为第1,2,3行,而不是第1,3,2行)
此外,相同的结论是否适用于不同的表达方式,例如DB[[1]], DB$V1
等。
2。
在对多列进行子集化时,我知道我需要使用类似DB[,.(V1, V2)],
的内容,但我对DB[,V1, V2]?
代码运行,似乎产生结果,但行与原始表的顺序不同。如果有人能够解释后面的代码意味着什么,那将是很有帮助的。
非常感谢!
答案 0 :(得分:0)
我想从小建议开始......如果你在SO上创建与数据处理相关的问题,那么在问题中提供可重现的代码是非常好的,如果不清楚则预期输出。您将获得更多的观众并收集更多优质的解决方案。这通常是r标记的常见做法。
子集保留顺序,数据的底层存储是面向列的,与常规SQL db(不知道行顺序)不同,它与基本R中的向量子集完全相同,速度更快。 />
关于[[
和$
,这些只是从data.table
提取列的方法,一般是list
,您可以使用DB[[1]]
,{{1 },DB[["V1"]]
。它们的行为会有所不同,具体取决于列/列表元素是否存在。
data.table DB$V1
运算符内的第三个参数是[
,它期望列分组,因此您可以查询按V2分组的列V1,而不使用任何聚合函数。这与by
或DB[, .(V1, V2)]
或DB[, c("V1","V2"), with=FALSE]
或DB[, list(V1,V2)]
,......非常不同。大多数api都是从基础R借来的,像DB[, .SD, .SDcols=c("V1","V2")]
或subset()
这样的函数。
最后,我建议您浏览一下data.table vignettes,还有我最近的长篇文章,其中包含各种数据。示例:Boost Your Data Munging with R。