2016-06-07 2 views
1

Как создать двунаправленную таблицу сортировки таблиц в R? У меня две переменные. Первый занимает всего 4 значения. Второй принимает множество строковых значений. Я хотел бы получить таблицу, в которой столбцы представляют собой 4 значения, и каждая строка является строкой. Частоты встречаются в теле таблицы. Я также хочу сортировать это - не в алфавитном порядке по имени строки, а по частоте - надеюсь, по общей частоте, как часто происходит слово (не учитывая 4 категории), но я также был бы счастлив, если бы он был просто отсортирован по одной частоте в одной колонке. Любые советы о том, как создать это? Конечной целью является создание таблицы LaTeX.Двусторонняя, отсортированная текстовая таблица частот в R

У меня есть данные в виду.

data <- data.frame(cat = sample(1:4, 100, replace=TRUE), string = sample(c("dog", "cat", "horse", "frog", "liger", "ligon", "tigon"), 100, replace = TRUE)) 
+3

Походит 'table' /' xtabs', но вам нужно [ОРЖМО] (http://stackoverflow.com/questions/5963269/ How-to-make-a-great-r-воспроизводимый пример/5963610 # 5963610) – alistaire

+0

Обновлено, чтобы включить его. Я также уточнил, что я имел в виду, сортируя. – bill999

ответ

3

Вы можете ordertable:

Набор семян для получения воспроизводимых результатов:

set.seed(47) 
# sample data 
df <- data.frame(cat = sample(1:4, 100, replace=TRUE), 
       string = sample(c("dog", "cat", "horse", "frog", "liger", "ligon", "tigon"), 100, replace = TRUE)) 

Составьте таблицу:

tab <- table(df$string, df$cat) 
tab 

#  1 2 3 4 
# cat 7 4 2 4 
# dog 2 1 4 2 
# frog 2 3 5 1 
# horse 4 3 3 1 
# liger 4 3 2 2 
# ligon 5 4 5 5 
# tigon 5 4 7 6 

Порядок его индексации строк по их сумме (отрицательная по убыванию):

ordered_tab <- tab[order(-rowSums(tab)),] 
ordered_tab 

#  1 2 3 4 
# tigon 5 4 7 6 
# ligon 5 4 5 5 
# cat 7 4 2 4 
# frog 2 3 5 1 
# horse 4 3 3 1 
# liger 4 3 2 2 
# dog 2 1 4 2 

Получить латексная код заказанного таблицы:

knitr::kable(ordered_tab, 'latex') 

# \begin{tabular}{l|r|r|r|r} 
# \hline 
# & 1 & 2 & 3 & 4\\ 
# \hline 
# tigon & 5 & 4 & 7 & 6\\ 
# \hline 
# ligon & 5 & 4 & 5 & 5\\ 
# \hline 
# cat & 7 & 4 & 2 & 4\\ 
# \hline 
# frog & 2 & 3 & 5 & 1\\ 
# \hline 
# horse & 4 & 3 & 3 & 1\\ 
# \hline 
# liger & 4 & 3 & 2 & 2\\ 
# \hline 
# dog & 2 & 1 & 4 & 2\\ 
# \hline 
# \end{tabular} 
+0

Основной вопрос, но можно ли изменить команду 'knitr :: kable (ordered_tab, 'latex'), чтобы экспортировать ее в .tex-файл вместо отображения на экране? – bill999

+1

Он предназначен для использования в 'knitr', поэтому он не имеет параметра сохранения, но вы можете легко его обернуть в' write': 'write (knitr :: kable (ordered_tab, 'latex'), file = ' table.tex ') ' – alistaire

3

Не видя ваши данные можно будет считать, вы можете использовать табличную функцию():

с некоторой игрушкой данных:

> head(df,10) 
    value string 
1  1 fruitcake 
2  2  lemon 
3  4 almonds 
4  2  lemon 
5  2  lemon 
6  4 biscuits 
7  1 fruitcake 
8  2 biscuits 
9  1 biscuits 
10  3 almonds 

Применить таблицы():

> table(df$string,df$value) 

      1 2 3 4 
    almonds 1 2 2 2 
    biscuits 2 1 1 3 
    fruitcake 3 1 1 3 
    lemon  2 5 5 1 
    peanuts 4 2 5 4 

Вы можете использовать функцию xtable() из пакета xtable, чтобы подтвердить соответствия динь код LaTeX:

> xtable(table(df$string,df$value)) 
Смежные вопросы