在 R 中透视数据但包含包含总计的逾期列?

问题描述 投票:0回答:1

在我的数据中,名为“Values”的列之一有 8 个不同的值。 Value1、Value2 等。另一列“状态”包含 5 种不同的状态。 Status1、Status2 等。还有另一列“截止日期”。

因此,每一行(数百行)都有 8 个值中的 1 个、5 个法规中的 1 个和截止日期。如果是Status5,则认为完成。但是,我想通过 RStudio 转换此信息,以便我可以按行查看 8 个不同的值,然后显示显示值的 5 列。看起来像是一个简单的枢轴,对吧?问题是:我需要在数据透视表中的 5 个标有“逾期”的法规旁边增加一列。正如您所猜测的,我希望此列按值计算有多少个值到期,并将其整齐地放置在我的数据透视表中最后一个“状态”列旁边。我还需要有一个“总计”行和一个“总计”列。

我尝试过 tabyl() 和 hub_wider() 但我陷入困境。鼓励提出建议 - 谢谢!我尝试过变异(使用“mutate()”创建一个过期的列,但我在将下一部分连接到枢轴时遇到问题。到目前为止,我已经:

df_Pivot <- df %>% tabyl(Values, Status) %>% adorn_totals("col") %>% adorn_totals("row")

因此,除了“逾期”列和信息之外的所有内容都包含在我上面提供枢轴的代码中。每次我尝试添加逾期的部分时,我都会收到错误。请帮忙!

示例数据:值状态到期日期(列) 值 1;状态 2;03/04/2024 值2;状态3;05/04/2024 值2;状态5;02/01/2024 值 6;状态 3;2024 年 3 月 25 日

r charts encoding pivot
1个回答
0
投票
set.seed(42)

library(tidyverse)

data <- data.frame(
  Values = sample(paste0("Value", 1:8), 1000, replace = TRUE),
  Status = sample(paste0("Status", 1:5), 1000, replace = TRUE),
  due_date = Sys.Date() + sample(-365:365, 1000, replace = TRUE)
)

data_body <- data %>% 
  count(Values, Status) %>% 
  pivot_wider(names_from = Status, values_from = n, values_fill = 0)

data_row_counts <- data_body %>% 
  rowwise() %>% 
  mutate(Total = sum(c_across(-Values))) %>% 
  select(Values, Total)

data_col_counts <- data_body %>% 
  left_join(data_row_counts, by = "Values") %>% 
  summarize(Values = "Total", across(-Values, sum))

data_col_overdue <- data %>% 
  mutate(is_over_due = Status != "Status5" & due_date < Sys.Date()) %>% 
  filter(is_over_due) %>% 
  count(Values, name = "Overdue")

data_cols <- data_body %>% 
  left_join(data_col_overdue, by = "Values") %>% 
  left_join(data_row_counts, by = "Values")

data_cols %>% 
  bind_rows(
    data_cols %>% 
      summarize(Values = "Total", across(-Values, sum))
  )
#> # A tibble: 9 × 8
#>   Values Status1 Status2 Status3 Status4 Status5 Overdue Total
#>   <chr>    <int>   <int>   <int>   <int>   <int>   <int> <int>
#> 1 Value1      30      27      28      24      25      55   134
#> 2 Value2      31      31      29      34      27      61   152
#> 3 Value3      23      27      31      28      16      57   125
#> 4 Value4      24      23      28      29      18      46   122
#> 5 Value5      29      25      25      19      25      47   123
#> 6 Value6      23      22      30      23      27      48   125
#> 7 Value7      15      26      24      27      25      42   117
#> 8 Value8      23      18      21      15      25      33   102
#> 9 Total      198     199     216     199     188     389  1000

创建于 2024-03-26,使用 reprex v2.1.0

© www.soinside.com 2019 - 2024. All rights reserved.