如何在R中创建双向排序表格?我有两个变量。第一个只有4个值。第二个接受许多字符串值。我想最终得到一个表,其中列是4个值,每行是一个字符串。频率出现在桌子的主体中。我也想对它进行排序 - 不是按字母顺序排列,而是按字母顺序排列 - 有希望按照整体频率,单词出现的频率(不考虑4个类别),但如果仅按频率排序,我也会很高兴在一栏中。关于如何创建这个的任何提示?最终目标是创建一个LaTeX表。
我记住了这种数据。
CrossOriginFilter
答案 0 :(得分:3)
如果没有看到你的数据,我可以假设你可以使用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))
答案 1 :(得分:3)
您可以order
table
:
设置种子以获得可重现的结果:
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}