将总计添加到同时具有数字和文本数据的数据框并对其进行透视
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 -
我有一个我认为很简单的问题,但结果却很棘手....我正在尝试将 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 -