【问题标题】:How do I specify a sort order using a list?如何使用列表指定排序顺序?
【发布时间】:2011-12-08 00:25:01
【问题描述】:

请原谅我的无知,但我无法对数据框进行排序。我想在排序时指定一个像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")]),],但我得到“选择了未定义的列”。如果字符向量中也有 14 个条目,我会得到同样的错误,所以我现在真的很困惑。

这是输出:

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

【问题讨论】:

    标签: r sorting


    【解决方案1】:

    你可以用“内联”来做

    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
    

    【讨论】:

    • 啊,必须将它们设为因子,然后指定级别。现在我已经开始在我的导入中设置 stringsAsFactors = FALSE 我真的开始了解因素是什么!
    【解决方案2】:

    不知道为什么,但这并没有改变我的数据框的顺序。

    相反,下面的代码做了:

       dfordered=df[c(1,2,3,9,5,6,8,10,11,4,7),]
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-18
      • 1970-01-01
      • 1970-01-01
      • 2011-09-29
      • 1970-01-01
      • 1970-01-01
      • 2021-04-02
      相关资源
      最近更新 更多