我有,看起來像下面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
所述一個對於每一個日期,可以有更多小時的觀察的數據表,並且每個小時具有一個每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列的單個條目,而不是與所有dir_X共享同一個datecolumn和h以使得調用DT [,lapply(.SD,function(x)x),by =列表(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
如果能夠在一步中獲得所需的輸出將是最好的,但這種組織數據的第二種方式可能是一個好的開始。 有關如何處理此問題的任何建議? 非常感謝。 迭戈
在代碼中,您只是在進行標識操作。 – akrun