R:用dplyr

时间:2017-06-18 03:00:17

标签: r dplyr

我正在尝试为数据集中的每个任务提供一个总和,该数据集仅使用在总和中为id一次观察到的最大值。如果不清楚我已在下面提供了所需输出的示例。

示例数据

dat <- data.frame(task = rep(LETTERS[1:3], each=3), 
                  id = c(rep(1:2, 4) , 3),
                  value = c(rep(c(10,20), 4), 5))
dat
  task id value
1    A  1    10
2    A  2    20
3    A  1    10
4    B  2    20
5    B  1    10
6    B  2    20
7    C  1    10
8    C  2    20
9    C  3     5

我找到了一个有效的答案,但它需要两个独立的group_by()函数。有没有办法用一个group_by()获得相同的输出?原因是我有其他对分组敏感的汇总指标,我不能在同一个管道中运行两个不同的group_by函数。

dat %>% 
  group_by(task, id) %>%
  summarize(v = max(value)) %>%
  group_by(task) %>%
  summarize(unique_ids = n_distinct(id), 
            value_sum = sum(v))

# A tibble: 3 × 3
   task unique_ids value_sum
  <chr>      <int>     <dbl>
1     A          2        30
2     B          2        30
3     C          3        35

1 个答案:

答案 0 :(得分:1)

我找到了一些可以使用dat %>% group_by(task) %>% summarize(unique_ids = length(unique(id)), value_sum = sum(tapply(value, id, FUN = max))) # A tibble: 3 × 3 task unique_ids value_sum <chr> <int> <dbl> 1 A 2 30 2 B 2 30 3 C 3 35 的功能。

$percentage_array = array(
                         'xaa' => 1,
                         'xab' => 1,
                         'xac' => 1,
                         'non' => 1,
                         'sox' => 1);
$pattern = "/^x(.*)/";
$filtered_array = preg_filter($pattern, "$0", array_keys( $percentage_array ));
echo "<pre>";
print_r($filtered_array);