Таблица R, 2 факторных переменных, не может генерировать проценты столбца - PullRequest
0 голосов
/ 25 января 2019

У меня есть две факторные переменные, которые я хочу поместить в таблицу / кросс-таблицу, чтобы получить частоты по категориям. Я хочу выразить эти частоты в процентах от столбца, то есть рассчитать только на счетчиках для каждого столбца (каждый столбец должен иметь общее значение 100%).

Всякий раз, когда я выполняю свой сценарий с prop.table(tab1, 2), R возвращает то, что представляется процентами столбцов, где каждая категория представляет собой долю всей выборки, а не только частоты столбцов (я также должен отметить, что данные взвешены, хотя я может повторить проблему без весов).

Я мучительно искал решение, и пока ничего не получалось. Я пытался преобразовать таблицу в матрицу и фрейм данных, но это не помогло. Я пробовал разные пакеты, xtabs() и другие функции, чтобы теперь воспользоваться.

Вот соответствующий код:

# Raw data import | will make copy for editing.

rawdata = read.csv(file.choose(), header = TRUE)
data = rawdata

# Install Rcmdr for wtd.table() function

install.packages("Rcmdr")
library(Rcmdr)

# Create table

tab1 <- wtd.table(data$occ, data$degree, weights = data$PERWT)
tab1

prop.table(tab1, 2)
prop.table(tab1, 2)*100

Для взвешенного подсчета таблица не создает проблем (для фактических данных существует 15 категорий степеней и 26 категорий заданий):

        Deg1    Deg2    Deg3    Deg4    Deg5    
Job1    1000    1000    1000    1000    1000    
Job2    2000    2000    2000    2000    2000    
Job3    3000    3000    3000    3000    3000    
Job4    4000    4000    4000    4000    4000   
Job5    5000    5000    5000    5000    5000 

Когда я запускаю prop.table(tab1, 2), я ожидаю что-то вроде этого:

        Deg1    Deg2    Deg3    Deg4    Deg5    
Job1    0.07    0.07    0.07    0.07    0.07 
Job2    0.13    0.13    0.13    0.13    0.13  
Job3    0.20    0.20    0.20    0.20    0.20 
Job4    0.27    0.27    0.27    0.27    0.27 
Job5    0.33    0.33    0.33    0.33    0.33 

Однако на самом деле я получаю причудливые числа, которые, по-видимому, основаны на всей выборке, а не только на столбце, например ::1010 *

        Deg1           
Job1    5.088906e-03
Job2    1.94034e-02
Job3    6.236119e-03
Job4    4.495131e-02
Job5    1.315560e-01

Этот шаблон повторяется во всех 15 степенях и во всех 26 категориях заданий. Запуск prop.table(tab1, 2)*100 не имеет никакого эффекта: значения остаются одинаковыми, не зависит от умножения.

Я очень сильно растерялся, и, будучи новым пользователем R, я уверен, что совершаю какую-то легкую ошибку. Любая помощь с благодарностью.

1 Ответ

0 голосов
/ 25 января 2019

Мы можем использовать prop.table с apply:

apply(tab, 2, prop.table)

Второй аргумент 2 указывает, что мы применяем prop.table к каждому столбцу матрицы / фрейма данных.

Выход:

           Deg1       Deg2       Deg3       Deg4       Deg5
Job1 0.06666667 0.06666667 0.06666667 0.06666667 0.06666667
Job2 0.13333333 0.13333333 0.13333333 0.13333333 0.13333333
Job3 0.20000000 0.20000000 0.20000000 0.20000000 0.20000000
Job4 0.26666667 0.26666667 0.26666667 0.26666667 0.26666667
Job5 0.33333333 0.33333333 0.33333333 0.33333333 0.33333333

Данные:

tab <- structure(c(1000L, 2000L, 3000L, 4000L, 5000L, 1000L, 2000L, 
3000L, 4000L, 5000L, 1000L, 2000L, 3000L, 4000L, 5000L, 1000L, 
2000L, 3000L, 4000L, 5000L, 1000L, 2000L, 3000L, 4000L, 5000L
), .Dim = c(5L, 5L), .Dimnames = list(c("Job1", "Job2", "Job3", 
"Job4", "Job5"), c("Deg1", "Deg2", "Deg3", "Deg4", "Deg5")))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...