【问题标题】:R - Order of the data table records from subsetting columnsR - 子集列中数据表记录的顺序
【发布时间】:2016-09-09 19:02:45
【问题描述】:

我目前正在学习 R 中的 data.table。有几个问题让我感到困惑:

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

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

2。 当对多列进行子集化时,我知道我需要使用类似 DB[,.(V1, V2)], 的东西,但我对 DB[,V1, V2]? 的结果感到困惑

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

非常感谢!

【问题讨论】:

    标签: r data.table subset


    【解决方案1】:

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

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

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

    最后我建议通过data.table vignettes,还有我最近的长篇文章,通过各种data.table示例:Boost Your Data Munging with R

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-23
      • 1970-01-01
      • 1970-01-01
      • 2021-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多