我有下表。
| 日期 | 貓 |
|---|---|
| 1999 年 15 月 2 日 | 一個 |
| 1999 年 15 月 2 日 | 一個 |
| 1999 年 15 月 2 日 | 乙 |
| 1999 年 15 月 5 日 | 一個 |
| 1999 年 15 月 5 日 | 乙 |
| 1999 年 10 月 15 日 | C |
| 1999 年 10 月 15 日 | C |
| 2001 年 15 月 2 日 | 一個 |
| 2001 年 15 月 2 日 | 一個 |
| 2001 年 6 月 15 日 | 乙 |
| 2001 年 6 月 15 日 | 乙 |
| 2001 年 6 月 15 日 | C |
| 2001 年 15 月 11 日 | C |
| 2001 年 15 月 11 日 | C |
我想對其應用 pivot_wider(或任何其他類似功能),并考慮如下所示的日期和年份列。Cat 列正在根據變數 A、B 和 C 進行拆分,并且正在顯示計數。
| 月 | 年 | 一個 | 乙 | C | 全部的 |
|---|---|---|---|---|---|
| 二月 | 1999 | 2 | 1 | 0 | 3 |
| 可能 | 1999 | 1 | 1 | 0 | 2 |
| 十月 | 1999 | 0 | 0 | 2 | 2 |
| 二月 | 2001年 | 2 | 0 | 0 | 2 |
| 六月 | 2001年 | 0 | 2 | 1 | 3 |
| 十一月 | 2001年 | 0 | 0 | 2 | 2 |
這里有誰知道我怎么能同時做到這兩點?謝謝
uj5u.com熱心網友回復:
你可以用tidyverse包來做到這一點。首先,將您的日期列格式化為日期,然后按月計數,轉向更寬并格式化表格。
library(tidyverse)
data %>%
mutate(Date = as.Date(Date, format = "%d/%m/%Y")) %>%
group_by(Cat, month = lubridate::floor_date(Date, "month")) %>%
count(Cat) %>%
pivot_wider(names_from = Cat, values_from = n, values_fill = 0) %>%
mutate(year = year(month), .before = "A",
month = month(month, label = T, abbr = F)) %>%
mutate(Total = rowSums(across(A:C))) %>%
arrange(year)
month year A B C Total
<ord> <dbl> <int> <int> <int> <dbl>
1 February 1999 2 1 0 3
2 May 1999 1 1 0 2
3 October 1999 0 0 2 2
4 February 2001 2 0 0 2
5 June 2001 0 2 1 3
6 November 2001 0 0 2 2
資料
data <- structure(list(Date = c("15/2/1999", "15/2/1999", "15/2/1999",
"15/5/1999", "15/5/1999", "15/10/1999", "15/10/1999", "15/2/2001",
"15/2/2001", "15/6/2001", "15/6/2001", "15/6/2001", "15/11/2001",
"15/11/2001"), Cat = c("A", "A", "B", "A", "B", "C", "C", "A",
"A", "B", "B", "C", "C", "C")), class = "data.frame", row.names = c(NA,
-14L))
uj5u.com熱心網友回復:
另一種可能的解決方案:
library(tidyverse)
library(lubridate)
df <- data.frame(
stringsAsFactors = FALSE,
Date = c("15/2/1999",
"15/2/1999","15/2/1999","15/5/1999","15/5/1999",
"15/10/1999","15/10/1999","15/2/2001","15/2/2001",
"15/6/2001","15/6/2001","15/6/2001","15/11/2001",
"15/11/2001"),
Cat = c("A","A","B","A",
"B","C","C","A","A","B","B","C","C","C")
)
df %>%
mutate(Month = month(Date, label = TRUE), Year = year(dmy(Date))) %>%
pivot_wider(id_cols = c(Month, Year), names_from = Cat,
values_from = Cat, values_fn = length, values_fill = 0) %>%
mutate(Total = rowSums(.[3:5]))
#> # A tibble: 6 × 6
#> Month Year A B C Total
#> <ord> <dbl> <int> <int> <int> <dbl>
#> 1 Feb 1999 2 1 0 3
#> 2 May 1999 1 1 0 2
#> 3 Oct 1999 0 0 2 2
#> 4 Feb 2001 2 0 0 2
#> 5 Jun 2001 0 2 1 3
#> 6 Nov 2001 0 0 2 2
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/420964.html
標籤:
下一篇:合并重疊的標簽物件并修改標簽值
