在R中排序列联表

时间:2014-06-26 14:23:12

标签: r sorting

我有一个数据框(df)

structure(list(key = 1:10, x = structure(c(1L, 1L, 1L, 2L, 3L, 
4L, 5L, 5L, 5L, 5L), .Label = c("x1", "x2", "x3", "x4", "x5"), class = "factor"), 
    y = structure(c(2L, 1L, 2L, 2L, 1L, 1L, 2L, 2L, 2L, 1L), .Label = c("no", 
    "yes"), class = "factor")), .Names = c("key", "x", "y"), class = "data.frame", row.names = c(NA, -10L))

当我使用table(df$x, df$y)创建列联表时,我得到了这个:

     no yes
  x1  1   2
  x2  0   1
  x3  1   0
  x4  1   0
  x5  1   3

但我想在yes列上排序输出,所以输出如下: 不是的

    no  yes
  x5  1   3
  x1  1   2
  x2  0   1
  x3  1   0
  x4  1   0

我一直在网上搜索一个简单的答案,我很惊讶我找不到任何答案。

2 个答案:

答案 0 :(得分:4)

您可以按照与R。

中的矩阵或data.frame排序相同的方式对表进行排序
tt<-with(df, table(x,y))
tt[order(tt[,2], decreasing=T),]

#     y
# x    no yes
#   x5  1   3
#   x1  1   2
#   x2  0   1
#   x3  1   0
#   x4  1   0

答案 1 :(得分:0)

因为我非常喜欢arrange中的dplyr

library(dplyr)
table(df$x, df$y) %>% as.data.frame.matrix(.) %>% arrange(desc(yes))

我们必须做一个中间步骤 - 将表转换为数据框 - 因为dplyr不知道如何处理表。对于这个问题,这可能有些过分,但arrange是一个非常有用的小功能。对我来说,阅读和记忆要比使用order容易得多。