在R中的DF中进行分组,枢转,计数和求和

时间:2019-05-08 20:16:57

标签: r dplyr

我有一个日期框架,其中包含字段PARTIDA(日期),Operação(4级因子)和TT(数字)。

nenter image description here

我需要按PARTIDA列分组,将Operation列计数到每个级别的频率,然后将TT列求和。 像这样:

enter image description here

我已经尝试过使用dplyr进行操作,但无法获得此结果,有人可以帮助我吗?

2 个答案:

答案 0 :(得分:0)

这里有两个步骤,可能会为您提供所需的东西:

library(dplyr)

df <- 
  tibble(
    partida = c("date1", "date2", "date3", "date1", "date2"),
    operacao = c("D", "J", "C", "D", "M"),
    tt = c(1, 2, 3, 4, 5)
  )

tt_sums <- 
  df %>% 
  group_by(partida) %>% 
  count(wt = tt)

operacao_counts <-
  df %>% 
  group_by(partida, operacao) %>% 
  count() %>% 
  ungroup() %>% 
  spread(operacao, n) %>% 
  mutate_if(is.numeric, replace_na, 0)

final_df <-
  operacao_counts %>% 
  left_join(tt_sums, by = "partida")

> final_df
# A tibble: 3 x 6
  partida     C     D     J     M     n
  <chr>   <dbl> <dbl> <dbl> <dbl> <dbl>
1 date1       0     2     0     0     5
2 date2       0     0     1     1     7
3 date3       1     0     0     0     3

答案 1 :(得分:0)

与@ cardinal40的答案类似,但是我尽力限制可能添加到我的环境中的对象的数量。答案都可以解决问题。

df %>% 
  group_by(partida) %>% 
  mutate(tt = sum(tt)) %>% 
  group_by(partida, operacao, tt) %>% 
  count() %>% 
  ungroup() %>% 
  spread(operacao, n) %>% 
  mutate_if(is.numeric, replace_na, 0)