【问题标题】:Problems with group_by for counting in R [duplicate]在 R 中计数的 group_by 问题[重复]
【发布时间】:2021-10-22 22:03:48
【问题描述】:

我有一个 data.frame 看起来或多或少像这个但有 195780 个观察值:

structure(list(fecha = structure(c(17897, 17897, 17897, 17897, 
17897, 17897, 17897, 17897, 17897, 17897, 17897, 17897, 17897, 
17897, 17897, 18255, 18255, 18255, 18255, 18255, 18255, 18256, 
18256, 18256, 18256, 18256, 18256, 18256, 18256, 18256, 18256, 
18358, 18358, 18358, 18358, 18358, 18358, 18358, 18358, 18358, 
18358, 18358, 18358, 18358, 18358, 18358, 18358, 18900, 18900, 
18900, 18900, 18900, 18900, 18900, 18900, 18900, 18900, 18900
), class = "Date"), año = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L), .Label = c("2019", "2020", "2021"), class = "factor"), 
    mes = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 
    12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 4L, 4L, 4L, 4L, 4L, 
    4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 9L, 9L, 9L, 9L, 
    9L, 9L, 9L, 9L, 9L, 9L, 9L), .Label = c("Enero", "Febrero", 
    "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", 
    "Octubre", "Noviembre", "Diciembre"), class = "factor"), 
    tipo_dia = c("F", "F", "F", "F", "F", "F", "F", "F", "F", 
    "F", "F", "F", "F", "F", "F", "F", "F", "F", "F", "F", "F", 
    "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", 
    "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", 
    "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", 
    "L")), row.names = c(NA, -58L), class = c("tbl_df", "tbl", 
"data.frame"))

我想要的是获得 tipo_dia 的年份和月份的计数,但只是唯一值的计数,即:在 Enero 2019 中有 N“F”天,在 Enero 2020 中有 K“L”天,等等开。

我试过了

df%>%
  group_by(año,mes,tipo_dia)%>%
  summarise(tipo_dia_conteo=sum(unique(tipo_dia)))

这给了我这个错误:

Error: Problem with `summarise()` column `tipo_dia_conteo`.
i `tipo_dia_conteo = sum(unique(tipo_dia))`

还有:

df%>%
  group_by(año,mes,tipo_dia)%>%
  summarise(tipo_dia_conteo=length(unique(tipo_dia)))

这给了我一个我显然不想要的结果:(请注意,这里出现了一些“S”,因为我正在使用我的完整数据库)

# A tibble: 121 x 4
# Groups:   año, mes [33]
   año   mes     tipo_dia tipo_dia_conteo
   <fct> <fct>   <chr>              <int>
 1 2019  Enero   D                      1
 2 2019  Enero   F                      1
 3 2019  Enero   L                      1
 4 2019  Enero   S                      1
 5 2019  Febrero D                      1
 6 2019  Febrero F                      1
 7 2019  Febrero L                      1
 8 2019  Febrero S                      1
 9 2019  Marzo   D                      1
10 2019  Marzo   F                      1

所以基本上我期望的是 Enero 2019 的“D”天数,同月的“L”和“S”天数,依此类推到 2021 年 9 月。 我觉得有点卡住了,所以任何帮助都将不胜感激。

【问题讨论】:

  • 不要按您要计数的列进行分组。 df %&gt;% group_by(año, mes) %&gt;% summarise(tipo_dia_conteo=n_distinct(tipo_dia))。否则,每个组中只有一个值。
  • 我已经尝试过了,但没有奏效。上表是最接近我需要的输出。
  • 这是你想要的吗? df %&gt;% group_by(año, mes) %&gt;% count(tipo_dia, name = "tipo_dia_conteo") 为您提供的特定样本输入提供所需的输出会很有帮助,以便可以测试可能的解决方案。
  • 这行得通,但在我不得不提取所有重复的唯一值之前。谢谢,伙计。
  • 或者只有count - df %&gt;% count(fecha, año, tipo_dia)

标签: r dataframe summarization


【解决方案1】:

您在寻找:

library(tidyverse)
df %>%
  group_by(ano, mes) %>%
  count(tipo_dia)

给出:

# A tibble: 5 x 4
# Groups:   ano, mes [4]
  ano   mes        tipo_dia     n
  <fct> <fct>      <chr>    <int>
1 2019  Enero      F           15
2 2019  Diciembre  F            6
3 2019  Diciembre  L           10
4 2020  Abril      L           16
5 2021  Septiembre L           11

请注意,在我的示例中,我必须将 año 列重命名为 ano。不确定这是否只是我的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-17
    • 1970-01-01
    • 1970-01-01
    • 2020-11-24
    • 2021-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多