Транспонирование сводной таблицы

У меня есть таблица со следующим форматом в текстовом файле:

введите описание изображения здесь

И мне нужно транспонировать его так, чтобы он выглядел так:

введите описание изображения здесь

Есть ли простой способ сделать это в R?

r,

0

Ответов: 3


2 принят
library(tidyverse)
 df1%>%
    spread(species,count)%>%
    rbind(c(status="Total",colSums(.[-1])))
  status  A B  C
1  Alive 37 6 13
2   Dead 17 0 11
3  Total 54 6 24

Чтобы сохранить класс как числовой, вы можете:

 df1%>%
     spread(species,count)%>%
     rbind(cbind.data.frame(status="Total",t(colSums(.[-1]))))
  status  A B  C
1  Alive 37 6 13
2   Dead 17 0 11
3  Total 54 6 24

2

Решение, использующее reshape2::dcastи dplyr::summarise_atможет быть достигнуто путем изменения данных, wide-formatа затем привязки к сводным строкам для включения Total. Решение будет выглядеть так:

library(tidyverse)
library(reshape2)

dcast(df, status~species, value.var = "count") %>%
  bind_rows(c(status = "Total",summarise_at(.,vars(A:C), funs(sum))))

#   status  A B  C
# 1  Alive 37 6 13
# 2   Dead 17 0 11
# 3  Total 54 6 24

Данные:

df <- read.table(text="
species status count
A Dead 17
A Alive 37
B Dead 0
B Alive 6
C Dead 11
C Alive 13",
header = TRUE, stringsAsFactors = FALSE)

1

Мы могли бы использовать xtabsс addmarginsотbase R

addmargins(xtabs(count  ~ status + species, df), 1)
#       species
#status   A  B  C
#  Alive 37  6 13
#  Dead  17  0 11
#  Sum   54  6 24

данные

df <- structure(list(species = c("A", "A", "B", "B", "C", "C"),
 status = c("Dead", 
 "Alive", "Dead", "Alive", "Dead", "Alive"), count = c(17L, 37L, 
 0L, 6L, 11L, 13L)), .Names = c("species", "status", "count"), 
 class = "data.frame", row.names = c(NA, -6L))
р,
Похожие вопросы
Яндекс.Метрика