【问题标题】:Two-Way, Sorted Textual Frequency Table in RR中的双向排序文本频率表
【发布时间】:2017-01-26 22:51:35
【问题描述】:

如何在 R 中创建一个双向排序的表格?我有两个变量。第一个只有 4 个值。第二个接受许多字符串值。我想最终得到一个表格,其中列是 4 个值,每一行都是一个字符串。频率出现在表格的主体中。我也想对此进行排序 - 不是按字符串名称的字母顺序,而是按频率 - 希望按总频率,一个单词出现的频率(不考虑 4 个类别),但如果它只是按频率排序,我也会很高兴在一列中。关于如何创建这个的任何提示?最终目标是创建一个 LaTeX 表格。

我想到了这种数据。

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

【问题讨论】:

  • 听起来像table/xtabs,但你需要an MRE
  • 更新为包含一个。我还澄清了排序的含义。

标签: r text frequency


【解决方案1】:

你可以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

获取有序表的 Latex 代码:

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}

【讨论】:

  • 基本问题,但是否可以修改 `knitr::kable(ordered_tab, 'latex') 命令将其导出到 .tex 文件而不是显示在屏幕上?
  • 它被设计为在knitr中使用,所以它没有保存参数,但是你可以很容易地将它包装在write中:write(knitr::kable(ordered_tab, 'latex'), file = 'table.tex')
【解决方案2】:

如果没有看到你的数据,我可以假设你可以使用 table() 函数:

一些玩具数据:

> 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))

【讨论】:

    猜你喜欢
    • 2018-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-07
    • 2016-12-09
    • 2022-01-13
    • 2013-12-28
    相关资源
    最近更新 更多