2016-08-10 7 views
1

日付フィールドにreshape関数を使用していて、再フォーマットされたテーブルにフィールドがリストされる順序を変更する方法があるのだろうかと思います。 私は元のテーブルを整形する前にソートしようとしましたが、動作しませんでした。逆に私はフィールドを作り直さフィールドの順序を見たいR reshape wide、timevar orderを変更する

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

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-08 ErrorCount.2016-08-04 
# 1  1      3      6 
# 2  2      4      8 

をそれは些細に見えるかもしれませんそれは私が持っている必要があるものです。

+0

「タイムスタンプ」列に引用符を使用してください。 – akrun

+1

あなたは、形を変えた後で列を並べ替えることができますか? – rawr

+0

@rawrあなたは私の考えを並べ替え、私はこれを思いついた:ColumnCount = ncol(Reshape_Counts) DQ_Summary = Reshape_Counts [、c(1:4、ColumnCount:5)] – JRDew

答えて

0

我々は逆方向

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で行うことができるでunique日付として指定levelsfactorに「ProcessorTimeStamp」を変換した後、これはreshape2からdcastをどうする方が簡単です

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 
関連する問題