【发布时间】: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 %>% group_by(año, mes) %>% summarise(tipo_dia_conteo=n_distinct(tipo_dia))。否则,每个组中只有一个值。 -
我已经尝试过了,但没有奏效。上表是最接近我需要的输出。
-
这是你想要的吗?
df %>% group_by(año, mes) %>% count(tipo_dia, name = "tipo_dia_conteo")为您提供的特定样本输入提供所需的输出会很有帮助,以便可以测试可能的解决方案。 -
这行得通,但在我不得不提取所有重复的唯一值之前。谢谢,伙计。
-
或者只有
count-df %>% count(fecha, año, tipo_dia)
标签: r dataframe summarization