将总计添加到同时具有数字和文本数据的数据框并对其进行透视

Add total to and pivot a dataframe that has both numeric and text data

我有一个我认为很简单的问题,但结果却很棘手....我正在尝试将 df 从宽转向长,在旋转之前添加列总计。但是 df 包含文本和数据,这似乎有问题?此外,真正的 df(不是下面的示例 Dput)具有相当多的列和行,因此理想情况下我不希望单独执行每个操作。请参阅下面我正在尝试的内容:

structure(list(Name = c("John", "Marco", "Tony"), Date = c("23/04/2020", 
"23/04/2020", "23/04/2020"), Col1 = c(27, 30, 56), Col2 = c(26, 25, 45), Col3 = c("red", "blue","green")), row.names = c(NA, 
-3L), class = c("tbl_df", "tbl", "data.frame"))

您可以使用 janitor 中的 adorn_totals 添加一个包含总计的新行。这为 non-numeric 列添加破折号(“-”)。然后,您可以使用 pivot_longer.

获取长格式的数据
library(dplyr)

df %>%
   janitor::adorn_totals() %>%
   mutate(across(.fns = as.character)) %>%
   #mutate_all in `dplyr` < 1.0.0
   #mutate_all(as.character) %>%
   tidyr::pivot_longer(cols = starts_with('Col'))

   
# A tibble: 12 x 4
#   Name  Date       name  value
#   <chr> <chr>      <chr> <chr>
# 1 John  23/04/2020 Col1  27   
# 2 John  23/04/2020 Col2  26   
# 3 John  23/04/2020 Col3  red  
# 4 Marco 23/04/2020 Col1  30   
# 5 Marco 23/04/2020 Col2  25   
# 6 Marco 23/04/2020 Col3  blue 
# 7 Tony  23/04/2020 Col1  56   
# 8 Tony  23/04/2020 Col2  45   
# 9 Tony  23/04/2020 Col3  green
#10 Total -          Col1  113  
#11 Total -          Col2  96   
#12 Total -          Col3  -