【问题标题】:order values in categorical variable using `transform` function使用 `transform` 函数在分类变量中排序值
【发布时间】:2013-10-05 23:00:52
【问题描述】:

我有一个这样的测试数据集:

table(spamday)  
FR MO SA SU TH TU WE  
30 96  9  9 45 60 51

结构:

str(spamday)  
'data.frame':   300 obs. of  1 variable:
$ SPAMreceived: Factor w/ 7 levels "FR","MO","SA",..: 2 5 5 5 6 2 6 2 2 6 ...  

我的目标是使用transform 函数使分类变量成为有序因子,并按照levels 指令施加的顺序

所以我运行以下代码:

spamday <- transform(spamday, SPAMreceived <- factor(SPAMreceived, levels = c("MO", "TU", "WE", "TH", "FR", "SA", "SU"), ordered = TRUE))

你猜怎么着?什么都没有发生...使用 table 时还是一样:

table(spamday)  
FR MO SA SU TH TU WE  
30 96  9  9 45 60 51

我很困惑...请问我做错了什么?

【问题讨论】:

    标签: r


    【解决方案1】:

    有时很难跟踪何时使用 &lt;- 以及何时使用它,但这是您确实想要的情况使用它。换句话说,只需将代码更改为以下内容即可:

    spamday <- transform(spamday, SPAMreceived = factor(SPAMreceived, 
        levels = c("MO", "TU", "WE", "TH", "FR", "SA", "SU"), ordered = TRUE)) 
    

    这是一个小例子:

    set.seed(1)
    spamday <- data.frame(SPAMreceived = sample(c("FR", "MO", "SA", "SU", "TH", "TU", "WE"),
                                                50, replace = TRUE))
    table(spamday$SPAMreceived)
    # 
    # FR MO SA SU TH TU WE 
    #  5  7  7  6  9 10  6
    
    temp <- transform(spamday, SPAMreceived = factor(SPAMreceived, 
        levels = c("MO", "TU", "WE", "TH", "FR", "SA", "SU"), ordered = TRUE))
    table(temp$SPAMreceived)
    # 
    # MO TU WE TH FR SA SU 
    #  7 10  6  9  5  7  6 
    

    或者,您甚至不需要创建有序因子列。只需在最后阶段对您的表格进行排序:)

    table(spamday$SPAMreceived)[c("MO", "TU", "WE", "TH", "FR", "SA", "SU")]
    # 
    # MO TU WE TH FR SA SU 
    #  7 10  6  9  5  7  6
    

    【讨论】:

      猜你喜欢
      • 2013-11-22
      • 2023-02-22
      • 1970-01-01
      • 2020-12-12
      • 1970-01-01
      • 1970-01-01
      • 2018-03-04
      • 1970-01-01
      • 2011-10-21
      相关资源
      最近更新 更多