Как объединить атрибуты в таблице частот в R? - PullRequest
1 голос
/ 14 марта 2020

Предположим, у меня есть две переменные. См. Фиктивные данные ниже:

Из 250 записей:

SEX

Мужской: 100

Женский: 150

ВОЛОС

Короткий: 110

Длинный: 140

Код, который я в настоящее время использую, предоставлен ниже, для для каждой переменной создается отдельная таблица:

sexTable <- table(myDataSet$Sex)
hairTable <- table(myDataSet$Hair)

View(sexTable):
|------------------|------------------|
|       Level      |    Frequency     |
|------------------|------------------|
|        Male      |       100        |
|       Female     |       150        |
|------------------|------------------|


View(hairTable)
|------------------|------------------|
|       Level      |    Frequency     |
|------------------|------------------|
|        Short     |       110        |
|        Long      |       140        |
|------------------|------------------|

Мой вопрос заключается в том, как объединить две таблицы в R, которые будут иметь следующий формат, а также рассчитать процент частоты для каждой группы уровней:

|---------------------|------------------|------------------|
|      Variables      |       Level      |    Frequency     |
|---------------------|------------------|------------------|
|      Sex(N=250)     |        Male      |       100 (40%)  |
|                     |       Female     |       150 (60%)  |
|      Hair(N=250)    |        Short     |       110 (44%)  |
|                     |        Long      |       140 (56%)  |
|---------------------|------------------|------------------|

1 Ответ

1 голос
/ 14 марта 2020

Мы можем использовать bind_rows после преобразования в data.frame

library(dplyr)
bind_rows(list(sex = as.data.frame(sexTable),
       Hair = as.data.frame(hairTable)), .id = 'Variables')

Используя воспроизводимый пример

tbl1 <- table(mtcars$cyl)
tbl2 <- table(mtcars$vs)
bind_rows(list(sex = as.data.frame(tbl1), 
       Hair = as.data.frame(tbl2)), .id = 'Variables')%>% 
   mutate(Variables = replace(Variables, duplicated(Variables), ""))

Если нам также нужны проценты

dat1 <- transform(as.data.frame(tbl1), 
  Freq = sprintf('%d (%0.2f%%)', Freq,   as.numeric(prop.table(tbl1) * 100)))
dat2 <- transform(as.data.frame(tbl2), 
  Freq = sprintf('%d (%0.2f%%)', Freq,   as.numeric(prop.table(tbl2) * 100)))
bind_rows(list(sex = dat1, Hair = dat2, .id = 'Variables')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...