【问题标题】:Dynamically subset from data table in RR中数据表的动态子集
【发布时间】:2013-06-10 10:39:32
【问题描述】:

我有一个非常大的数据集,其中包含大约 300 万行和 13 列作为 R 中的数据表。我已经复制了一个示例数据--

 V1 V2 V3    V4   V5    V6        V7  V8 V9  V10    V11   V12     V13
 1 AAE CDG  AAE  PAR NAFR_UKWEU   2    0  0  1030   1250  0.15335  0
 2 AAE CDG  AAE  PAR NAFR_UKWEU   2    5  5  1130   1350  0.15293  0
 3 AAE ORY  AAE  PAR NAFR_UKWEU   2    4  4  1420   1750  0.00100  0
 4 AAE ORY  AAE  PAR NAFR_UKWEU   2    0  0  1320   1540  0.18183  0
 5 AAE ORY  AAE  PAR NAFR_UKWEU   2    5  5  1320   1540  0.18112  0
 6 AAE TXL  AAE  BER NAFR_UKWEU   2    3  3  1320   1540  0.17799  0
 7 AAE TXL  AAE  BER NAFR_UKWEU   2    1  1  1135   1345  0.15178  0
 8 AAL AGP  AAL  AGP  SCAND_SEU   3    1  1   645   1355  0.04071  0
 9 AAL AGP  AAL  AGP  SCAND_SEU   3    3  3   705   1425  0.01577  0
10 AAL AGP  AAL  AGP  SCAND_SEU   3    3  3   645   1355  0.01430  0

我想以V4&V5为key,从数据表中动态获取子集。如果我必须对上面给出的示例数据进行操作,我将在 thress 步骤中获得三个数据表,因为我们有 V4 和 V5 的三个独特组合。所以想要的输出是-

Step 1- Table 1:
V1 V2 V3    V4   V5    V5         V6  V7 V8  V9     V10   V11      V12
 1 AAE CDG  AAE  PAR NAFR_UKWEU   2    0  0  1030   1250  0.15335  0
 2 AAE CDG  AAE  PAR NAFR_UKWEU   2    5  5  1130   1350  0.15293  0
 3 AAE ORY  AAE  PAR NAFR_UKWEU   2    4  4  1420   1750  0.00100  0
 4 AAE ORY  AAE  PAR NAFR_UKWEU   2    0  0  1320   1540  0.18183  0
 5 AAE ORY  AAE  PAR NAFR_UKWEU   2    5  5  1320   1540  0.18112  0

 Step 2- Table 2:
 V1 V2 V3    V4   V5    V5        V6  V7 V8  V9     V10   V11      V12
 6 AAE TXL  AAE  BER NAFR_UKWEU   2    3  3  1320   1540  0.17799  0
 7 AAE TXL  AAE  BER NAFR_UKWEU   2    1  1  1135   1345  0.15178  0

 Step 3- Table 3: 

 V1 V2 V3    V4   V5    V5        V6  V7 V8  V9     V10   V11      V12
 8 AAL AGP  AAL  AGP  SCAND_SEU   3    1  1   645   1355  0.04071  0
 9 AAL AGP  AAL  AGP  SCAND_SEU   3    3  3   705   1425  0.01577  0
10 AAL AGP  AAL  AGP  SCAND_SEU   3    3  3   645   1355  0.01430  0

现在,由于数据量很大,V4 和 V5 的可能组合有很多,我们如何有效地提取 V4 和 V5 的每个唯一组合作为键的数据?

【问题讨论】:

  • 请告诉我们究竟你想做什么。 “重复对数据子集进行计算”是什么意思?什么计算?在哪些子集上?使用上面显示的数据,告诉我们您想要做什么以及结果应该是什么。然后我们就可以提供帮助了。
  • 更新问题..
  • 我认为您希望获得一个包含 V2 和 V5 组合的data.tables 列表?您需要查看?split。但是,如果您可以解释您打算如何处理这些 split-data.tables,也许有更好的方法。
  • 很难解释我想做什么,但我会尽量简单地解释。不,我不想要列表,我想要数据表,因为我必须将它与另一个表合并以进行一些基本的聚合练习。一旦完成,我将使用 V1 作为键将带有附加字段的新数据表合并回原始表。
  • @Pawan 可能有一种方法可以在单个 data.table 调用中执行此操作。如果您不发布示例,没有人可以告诉您。向我们展示您想要的另一个表和聚合。老实说,Arun 可能已经输入了完整的 data.table 解决方案的准系统。为他填空。

标签: r data.table subset


【解决方案1】:

我仍然不知道你想要什么。但我要尝试一下。假设你的 data.table 是 DT

idx <- unique(DT[, list(V4, V5)])
setkey(DT, "V4", "V5")
for (i in seq_len(nrow(idx))) {
    DT[idx[i]] # print(DT[idx[i]]) will show you each subset
}

【讨论】:

  • 这就是我要找的。很抱歉没有提供更多细节
  • 我很确定有更好的方法来处理您的问题。几乎从来没有人遇到过 data.table 的这个问题。但除非你能解释你的问题,否则这就是你所能想到的。例如:DT[, .SD, by=list(V4, V5)] 已经为每个组获取了 .SD 中的每个子集。因此,您应该在 j 中进行任何计算。
  • 如果你真的有在j里做不到的操作,那就是out &lt;- list(); x[,out[[.GRP]]&lt;&lt;-.SD,by="V4,V5"]。 3m 行 x 14 列并不算大,所以像这样复制数据应该比消耗内存更浪费时间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-19
  • 2015-01-30
  • 1970-01-01
  • 2020-10-12
  • 2021-12-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多