Поверните фрейм данных и одновременно подсчитайте категориальные наблюдения в r

Я боролся с этим. Это аббревиатура моего df:

structure(list(`Loperamida en diarrea` = c("Muy efectiva", "Muy efectiva", 
"Muy efectiva", "Algo efectiva"), `Carbón en diarrea` = c("Algo efectiva", 
"Algo efectiva", "Algo efectiva", "No Se"), `Bismuto en diarrea` = c("Algo efectiva", 
"Muy efectiva", "Algo efectiva", "No Se"), `Rifaximina en diarrea` = c("Algo efectiva", 
"Algo efectiva", "Algo efectiva", "Algo efectiva"), `Otros antibióticos en diarrea` = c("Algo efectiva", 
"Muy efectiva", "Algo efectiva", "Algo efectiva"), `Probióticos en diarrea` = c("Algo efectiva", 
"Algo efectiva", "Algo efectiva", "Algo efectiva"), `Trimebutina en diarrea` = c("Algo efectiva", 
"Algo efectiva", "Algo efectiva", "Algo efectiva")), row.names = c(NA, 
4L), class = "data.frame")

Это выглядит так в еще более короткой версии:

    
   Loperamida en diarrea   Carbón en diarrea     Bismuto en diarrea
     <chr>                       <chr>                 <chr>
1   Muy efectiva             Algo efectiva         Algo efectiva    
2   Muy efectiva             Poco efectiva          Muy efectiva    
3   Muy efectiva             Algo efectiva         Poco efectiva    
4   Algo efectiva                No Se                 No Se

И мне нужно преобразовать его в таблицу, где столбцы представляют собой 4 разных категории наблюдений, строки - это переменные (имена столбцов), а значения - количество наблюдений для каждого вида (n). Как это:

                            Muy efectiva  Algo efectiva    Poco efectiva  No Se
                                <int>         <int>           <int>       <int>
Loperamida en diarrea             n             n               n           n
Carbón en diarrea                 n             n               n           n
Bismuto en diarrea                n             n               n           n


person Ale Rey    schedule 01.11.2020    source источник


Ответы (2)


Используя dplyr и tidyr вы можете сделать:

library(dplyr)
library(tidyr)

df %>%
  pivot_longer(cols = everything()) %>%
  count(name, value) %>%
  pivot_wider(names_from = value, values_from = n, values_fill = 0)
person Ronak Shah    schedule 01.11.2020

После некоторых попыток я нашел другое решение, которое может быть полезно:

cols <- c("Loperamida en diarrea","Carbón en diarrea","Bismuto en diarrea")

mtabulate(df[cols])
person Ale Rey    schedule 01.11.2020