【问题标题】:R reshape wide, change timevar orderR重塑宽,改变timevar顺序
【发布时间】:2016-08-10 20:33:37
【问题描述】:

我正在对日期字段使用 reshape 函数,想知道是否有办法更改字段在 reshape 表中列出的顺序。 我尝试在重塑之前对原始表格进行排序,但没有成功。

DQ_Summary= data.frame(RuleID=c(1,2,1,2),
                      ProcessorTimeStamp=as.Date(c('2016-08-04','2016-08-04','2016-08-08','2016-08-08')),
                      ErrorCount=c(6,8,3,4))

#   RuleID ProcessorTimeStamp ErrorCount
# 1      1         2016-08-04          6
# 2      2         2016-08-04          8
# 3      1         2016-08-08          3
# 4      2         2016-08-08          4

Final_Summary = reshape(DQ_Summary,
                        timevar = "ProcessorTimeStamp",
                        idvar = c("RuleID"),
                        direction = "wide")

上面的代码返回一个表格,格式如下:

#   RuleID ErrorCount.2016-08-04 ErrorCount.2016-08-08
# 1      1                     6                     3
# 2      2                     8                     4

我希望看到字段的顺序颠倒了重塑字段:

#   RuleID ErrorCount.2016-08-08 ErrorCount.2016-08-04
# 1      1                     3                     6
# 2      2                     4                     8

这可能看起来微不足道,但这是我需要的。

【问题讨论】:

  • 请在“时间戳”列中使用引号。
  • 你可以在 reshape 之后重新排序列吗?
  • @rawr 你重新排序的想法抓住了我,我想出了这个:ColumnCount=ncol(Reshape_Counts) DQ_Summary = Reshape_Counts[,c(1:4,ColumnCount:5)]

标签: r reshape


【解决方案1】:

在我们将“ProcessorTimeStamp”转换为factor 并将levels 指定为unique 反向日期后,这更容易使用dcastreshape2 完成

library(reshape2)
DQ_Summary$ProcessorTimeStamp <- factor(DQ_Summary$ProcessorTimeStamp, 
    levels = as.character(sort(unique(as.Date(DQ_Summary$ProcessorTimeStamp)),
                decreasing = TRUE)))
dcast(DQ_Summary, RuleID~ProcessorTimeStamp, value.var = "ErrorCount")

或者这可以通过dplyr/tidyr 来完成

library(dplyr)
library(tidyr)
DQ_Summary %>%
       mutate(ProcessorTimeStamp = factor(ProcessorTimeStamp, 
           levels = as.character(sort(unique(as.Date(ProcessorTimeStamp)), 
              decreasing = TRUE)))) %>% 
       spread(ProcessorTimeStamp, ErrorCount)
#  RuleID 2016-08-08 2016-08-04
#1      1          3          6
#2      2          4          8

【讨论】:

    猜你喜欢
    • 2016-08-26
    • 2021-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-27
    • 2019-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多