如何使用列表指定排序顺序?

6

请原谅我的无知,但我在对数据帧进行排序时遇到了麻烦。我想指定一个有序列表,如c("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"),以便按照列表的顺序对数据帧进行排序。

在这个例子中,我想从以下内容开始排序:

    Day Present Count
    Fri No  164
    Fri Yes 131
    Mon No  142
    Mon Yes 174
    Sat No  39
    Sat Yes 26
    Sun No  44
    Sun Yes 39
    Thu No  191
    Thu Yes 192
    Tue No  184
    Tue Yes 214
    Wed No  343
    Wed Yes 255

并以以下内容结束

    Day Present Count
    Mon No  142
    Mon Yes 174
    Tue No  184
    Tue Yes 214
    Wed No  343
    Wed Yes 255
    Thu No  191
    Thu Yes 192
    Fri No  164
    Fri Yes 131
    Sat No  39
    Sat Yes 26
    Sun No  44
    Sun Yes 39

我尝试过 perday[do.call(order, perday[c("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun")]),] 但是出现了“undefined columns selected”的错误。如果字符向量中有14个条目,我也会得到相同的错误,所以我现在非常困惑。

以下是dput:

perday<-structure(list(dayofweek = c("Fri", "Fri", "Mon", "Mon", "Sat", 
"Sat", "Sun", "Sun", "Thu", "Thu", "Tue", "Tue", "Wed", "Wed"
), Attended = structure(c(1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 
2L, 1L, 2L, 1L, 2L), .Label = c("No", "Yes"), class = "factor"), 
    nrow = c(164L, 131L, 142L, 174L, 39L, 26L, 44L, 39L, 191L, 
    192L, 184L, 214L, 343L, 255L)), .Names = c("dayofweek", "Attended", 
"nrow"), row.names = c(NA, -14L), class = "data.frame")
2个回答

9

你可以通过"inline"的方式来实现

perday[order(factor(perday$dayofweek,levels=c(c("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun")))),]

这提供了

   dayofweek Attended nrow
3        Mon       No  142
4        Mon      Yes  174
11       Tue       No  184
12       Tue      Yes  214
13       Wed       No  343
14       Wed      Yes  255
9        Thu       No  191
10       Thu      Yes  192
1        Fri       No  164
2        Fri      Yes  131
5        Sat       No   39
6        Sat      Yes   26
7        Sun       No   44
8        Sun      Yes   39

2
啊,必须将它们转换为因子并指定级别。现在我已经开始在导入时设置stringsAsFactors = FALSE,我真的开始了解因子的作用! - William Gunn

0
不知道为什么,但这并没有改变我的数据框的顺序。
相反,以下代码做到了:
   dfordered=df[c(1,2,3,9,5,6,8,10,11,4,7),]

请注意,您只需要更改df中行的原始顺序即可。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接