2016-11-22 3 views
0

私は観察のより多くの時間があるかもしれないすべての日付についてR:データ・テーブル・グループを平坦化し、

 datecolumn hourcolumn daycolumn V h m dir_0 dir_15 dir_30 dir_45 
    1: 2014.01.02  08:00   4 83 8 0  1  NA  NA  NA 
    2: 2014.01.02  08:15   4 72 8 15 NA  -1  NA  NA 
    3: 2014.01.02  08:30   4 60 8 30 NA  NA  0  NA 
    4: 2014.01.02  08:45   4 107 8 45 NA  NA  NA  -1 
    5: 2014.01.02  09:00   4 443 9 0 -1  NA  NA  NA 
    ---                  
40831: 2016.11.17  20:45   4 490 20 45 NA  NA  NA  -1 
40832: 2016.11.17  21:00   4 461 21 0  1  NA  NA  NA 
40833: 2016.11.17  21:15   4 502 21 15 NA  1  NA  NA 
40834: 2016.11.17  21:30   4 441 21 30 NA  NA  1  NA 
40835: 2016.11.17  21:45   4 617 21 45 NA  NA  NA  1 

以下のいずれかのように見えるのデータテーブルを持っており、毎時間、1つを持っているそれらのうちのデータテーブルを作成します15分ごとに入力します。私がする必要がどのような

は、DTが

datecolumn h m dir_0 dir_15 dir_30 dir_45 
1: 2014.01.02 8 0  1  -1  0  -1 
2: 2014.01.02 9 0 -1  -1  1  -1 
3: 2014.03.09 9 0  1  1  -1  -1 
. 
. 
. 

この結果を達成する "平ら" である私は、このコード

DT[, lapply(.SD, function(x) x), by=list(datecolumn, h), .SDcols = c("dir_0", "dir_15", "dir_30", "dir_45")] 

を試みたが、それは私に次のようになります:

datecolumn h m dir_0 dir_15 dir_30 dir_45 
1: 2014.01.02 8 0  1  NA  NA  NA 
2: 2014.01.02 8 15 NA  -1  NA  NA 
3: 2014.01.02 8 30 NA  NA  0  NA 
4: 2014.01.02 8 45 NA  NA  NA  -1 
5: 2014.01.02 9 0 -1  NA  NA  NA 
6: 2014.01.02 9 15 NA  -1  NA  NA 
7: 2014.01.02 9 30 NA  NA  1  NA 
8: 2014.01.02 9 45 NA  NA  NA  -1 
9: 2014.03.09 9 0  1  NA  NA  NA 
10: 2014.03.09 9 15 NA  1  NA  NA 
11: 2014.03.09 9 30 NA  NA  -1  NA 
12: 2014.03.09 9 45 NA  NA  NA  -1 
. 
. 
. 

サイクルでサブセット化して抽出することはできますが、それはエレガントで素早いものではありません。

上記の出力では、すべての行がdir_X列からの単一の項目であり、同じ日付列とhを共有するすべてのdir_Xを持つグループではありません。DT [、lapply(.SD、function(x)x)リスト(datecolumn、H)、.SDcolsの=のC( "dir_0"、 "dir_15"、 "dir_30"、 "dir_45は")] [1]リストに戻っているだろう、私は思う:

[[1]] 
     datecolumn h m dir_0 dir_15 dir_30 dir_45 
[1,] 2014.01.02 8 0  1  NA  NA  NA 
[2,] 2014.01.02 8 15 NA  -1  NA  NA 
[3,] 2014.01.02 8 30 NA  NA  0  NA 
[4,] 2014.01.02 8 45 NA  NA  NA  -1 

できること1つのステップで所望の出力を得ることが最良であるが、データを整理するこの第2の方法も良いスタートになる可能性がある。 これに対処する方法の提案はありますか? ありがとうございます。 サンディエゴ

+0

コードでは、アイデンティティ操作を行うだけです。 – akrun

答えて

0

はここdplyrベースのソリューション(少なくとも私はこれがあなたがやろうとしているものだと思います)です:

df %>% 
    group_by(datecolumn, h) %>% 
    summarise(dir_0 = mean(dir_0, na.rm = T), 
      dir_15 = mean(dir_15, na.rm = T), 
      dir_30 = mean(dir_30, na.rm = T), 
      dir_45 = mean(dir_45, na.rm = T) 
     ) 

あなたのデータフレームはDFと呼ばれ、唯一のスロットごとに1時間に1つの値がされていると仮定して。

+0

はい!それはまさに私が必要なものです! 私はdplyrを使ったことが一度もありませんでした。演算子%>%の力はdata.tableで行うと価値があると思います... 平均関数を使って、一つの有意義な価値はありませんか? ありがとうございました。 – Lord

関連する問題