gpt4 book ai didi

r - 使用相当于 purrr:::map 来遍历 data.table

转载 作者:行者123 更新时间:2023-12-04 13:03:24 24 4
gpt4 key购买 nike

我想遍历 data.table ,就像 purrr::map做。虽然我能够申请 data.table函数通过转换 data.framedata.tablepurrr::map , 我想知道是否data.table有一些内置的东西可以使用 purrr::map 取消.我问这个是因为我不确定 purrr::map的性能在速度和所需的内存方面。我对 dplyr 感到失望的速度和内存利用率,与 data.table 相比在处理大型数据集时。

我研究了计算器,发现在 Iterate through data tables 上接受了答案线程已使用 for环形。我不是 for 的忠实粉丝出于性能原因循环。

这是示例数据文件:

dput(Input_File)
structure(list(Zone = c("East", "East", "East", "East", "East",
"East", "East", "West", "West", "West", "West", "West", "West",
"West"), Fiscal.Year = c(2016, 2016, 2016, 2016, 2016, 2016,
2017, 2016, 2016, 2016, 2017, 2017, 2018, 2018), Transaction.ID = c(132,
133, 134, 135, 136, 137, 171, 171, 172, 173, 175, 176, 177, 178
), L.Rev = c(3, 0, 0, 1, 0, 0, 2, 1, 1, 2, 2, 1, 2, 1), L.Qty = c(3,
0, 0, 1, 0, 0, 1, 1, 1, 2, 2, 1, 2, 1), A.Rev = c(0, 0, 0, 1,
1, 1, 0, 0, 0, 0, 0, 1, 0, 0), A.Qty = c(0, 0, 0, 2, 2, 3, 0,
0, 0, 0, 0, 3, 0, 0), I.Rev = c(4, 4, 4, 0, 1, 0, 3, 0, 0, 0,
1, 0, 1, 1), I.Qty = c(2, 2, 2, 0, 1, 0, 3, 0, 0, 0, 1, 0, 1,
1)), .Names = c("Zone", "Fiscal.Year", "Transaction.ID", "L.Rev",
"L.Qty", "A.Rev", "A.Qty", "I.Rev", "I.Qty"), row.names = c(NA,
14L), class = "data.frame")

这是带有 purrr::map 的示例代码和 data.table
UZone <- unique(Input_File$Zone)
FYear <- unique(Input_File$Fiscal.Year)
a<-purrr::map(UZone, ~ dplyr::filter(Input_File, Zone == .)) %>%
purrr::map(~ data.table::as.data.table(.)) %>%
purrr::map(~ .[,.(sum = sum(L.Rev)),by=Fiscal.Year])

我不太关心输出,但我想知道有哪些替代方案可以迭代 data.table基于特定列。我很感激任何想法。

最佳答案

通过重复 [] 可以很好地完成管道数据表,例如DT[][][] .对于列表,我认为没有替代方案 magrittr .剩下的可以通过链接完成lapply

library(data.table)
library(magrittr)

Input_File <- data.table(Input_File)

UZone <- unique(Input_File$Zone)
FYear <- unique(Input_File$Fiscal.Year)

lapply(UZone, function(x) Input_File[Zone==x]) %>%
lapply(function(x) x[,.(sum=sum(L.Rev)), by=Fiscal.Year])

如果你想迭代 超过 列,你可能想看看 this solution

更新:我想可能有一个更清洁的解决方案,而无需导入 magrittr并且没有 $子集
library(data.table)

Input_File <- data.table(Input_File)

by_zone_lst <- lapply(Input_File[,unique(Zone)], function(x) Input_File[Zone==x])
summary_lst <- lapply(by_zone_lst, function(y) y[,.(sum=sum(L.Rev)), by=Fiscal.Year])

summary_lst

关于r - 使用相当于 purrr:::map 来遍历 data.table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47917614/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com