我有一个数据框(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
我一直在网上搜索一个简单的答案,我很惊讶我找不到任何答案。
答案 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
容易得多。