让我们假设我想在组内做某事,例如从每个组中提取第一行。使用tidyverse
和iris
数据集,这很容易:
iris %>%
group_by(Species) %>%
nest() %>%
mutate(first_within_group = map(data, ~head(.x, 1))) %>%
select(-data) %>%
unnest()
但是,对于更大的数据集,我会遇到性能问题。是否有group_by()
+ nest()
的替代方案,在速度方面会更有效率?效果是否取决于group_by()
内部的因素数量?
答案 0 :(得分:1)
<?php
require __DIR__ . '/../vendor/autoload.php';
require __DIR__ . '/../config/db.php';
$app = new \Slim\App(['settings' => $config]);
require __DIR__ . '/../app/dependencies.php';
require __DIR__ . '/../app/routes.php';
$app->run();
方式
data.table
基准
library( data.table )
dt <- as.data.table( iris )
dt[ dt[, .I[1], Species ]$V1]
答案 1 :(得分:0)
使用切片
iris %>% group_by(Species) %>% slice(1)
使用data.table
library(data.table)
irisDT = as.data.table(iris)
irisDT[ ,.SD[1], by = Species]
基准
expr min lq mean median uq max neval
map 8024.127 8274.1645 9048.5633 8625.7005 9254.004 12900.339 100
slice 943.808 986.0910 1274.0415 1082.6330 1428.091 4274.758 100
dt[] 657.492 701.5495 847.3838 757.3865 780.738 4405.899 100