Существует ли функция R, аналогичная pandas.crosstab, генерирующая объединенную таблицу частот с именованными атрибутами? - PullRequest
0 голосов
/ 19 февраля 2019

Я хотел бы создать таблицу частот итеративно, с одной переменной [var1, Y] или [var2, Y] и объединенными переменными [var1, var2, Y]

Коды ниже в R могуттолько составьте таблицу с одной частотой и таблицу с частотой соединения отдельно.

c1 <- ftable(variable[[1]], data1[,3])
#     Fund
# 
# b    21
# c   206
# d  1127

c1 <- ftable(variable[[3]], data1[,3])   
#     x.2   a   b   c   d
# x.1                    
# b         0   9   4   8
# c         0 116  51  39
# d         5 542 291 289

#variable[[3]] is a joint variable of variable[[1]] and variable[[2]]

as.matrix(as.vector(t(c1))) 
#       [,1]
# [1,]    0
# [2,]    9
# [3,]    4
# [4,]    8
# [5,]    0
# [6,]  116
# [7,]   51
# [8,]   39
# [9,]    5
# [10,]  542
# [11,]  291
# [12,]  289


ftable(variable[[1]], variable[[2]], data1[,3])
#       Fund
# 
# b a     0
# b       9
# c       4
# d       8
# c a     0
# b     116
# c      51
# d      39
# d a     5
# b     542
# c     291
# d     289

Есть ли способ создать таблицы частот вместе, но также сохранить именованный атрибут?

1 Ответ

0 голосов
/ 19 февраля 2019

Вы можете использовать addmargins, чтобы добавить поля (суммы строк и столбцов) в таблицу.

Например:

data(mtcars)

addmargins(table(mtcars[c("cyl", "gear")]))
#      gear
# cyl    3  4  5 Sum
#   4    1  8  2  11
#   6    2  4  1   7
#   8   12  0  2  14
#   Sum 15 12  5  32

ftable(addmargins(table(mtcars[c("cyl", "gear", "carb")])))
#          carb  1  2  3  4  6  8 Sum
# cyl gear                           
# 4   3          1  0  0  0  0  0   1
#     4          4  4  0  0  0  0   8
#     5          0  2  0  0  0  0   2
#     Sum        5  6  0  0  0  0  11
# 6   3          2  0  0  0  0  0   2
#     4          0  0  0  4  0  0   4
#     5          0  0  0  0  1  0   1
#     Sum        2  0  0  4  1  0   7
# 8   3          0  4  3  5  0  0  12
#     4          0  0  0  0  0  0   0
#     5          0  0  0  1  0  1   2
#     Sum        0  4  3  6  0  1  14
# Sum 3          3  4  3  5  0  0  15
#     4          4  4  0  4  0  0  12
#     5          0  2  0  1  1  1   5
#     Sum        7 10  3 10  1  1  32

Сначала я использую table для создания таблицы, так как addmargins ожидает вывод table, а не ftable.В случае трехмерной таблицы я, наконец, использую ftable, чтобы отформатировать таблицу в более удобочитаемом формате.

Генерация всех возможных таблиц

# Select columns interesting to use in table
dta <- mtcars[c("cyl", "vs", "am", "gear", "carb")]

# Generate all possible combinations of columns
combinations <- unlist(lapply(1:ncol(dta), 
  function(x) combn(1:ncol(dta), x, simplify = FALSE)), recursive = FALSE)

# For each combination calculate a table
tables <- lapply(combinations, function(cols) ftable(dta[cols]))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...