這裏是在1:20 1:10和時間值可能的ID值的解決方案。首先,創建數據:
mx <- matrix(c(sample(1:20, 5), sample(1:10, 5), sample(1:50, 5)), ncol=3, dimnames=list(NULL, c("time", "id", "reading")))
times <- 1:20
ids <- 1:10
mx
# time id reading
# [1,] 4 3 25
# [2,] 5 4 9
# [3,] 9 7 45
# [4,] 18 1 40
# [5,] 11 8 28
現在,使用outer
傳遞的時間每一個可能的組合和/ id來返回相應reading
值查找函數:
outer(times, ids,
function(x, y) {
mapply(function(x.sub, y.sub) {
val <- mx[mx[, 1] == x.sub & mx[, 2] == y.sub, 3]
if(length(val) == 0L) NA_integer_ else val
},
x, y)
})
這產生了(希望)想要的答案:
# [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
# [1,] NA NA NA NA NA NA NA NA NA NA
# [2,] NA NA NA NA NA NA NA NA NA NA
# [3,] NA NA NA NA NA NA NA NA NA NA
# [4,] NA NA 25 NA NA NA NA NA NA NA
# [5,] NA NA NA 9 NA NA NA NA NA NA
# [6,] NA NA NA NA NA NA NA NA NA NA
# [7,] NA NA NA NA NA NA NA NA NA NA
# [8,] NA NA NA NA NA NA NA NA NA NA
# [9,] NA NA NA NA NA NA 45 NA NA NA
# [10,] NA NA NA NA NA NA NA NA NA NA
# [11,] NA NA NA NA NA NA NA 28 NA NA
# [12,] NA NA NA NA NA NA NA NA NA NA
# [13,] NA NA NA NA NA NA NA NA NA NA
# [14,] NA NA NA NA NA NA NA NA NA NA
# [15,] NA NA NA NA NA NA NA NA NA NA
# [16,] NA NA NA NA NA NA NA NA NA NA
# [17,] NA NA NA NA NA NA NA NA NA NA
# [18,] 40 NA NA NA NA NA NA NA NA NA
# [19,] NA NA NA NA NA NA NA NA NA NA
# [20,] NA NA NA NA NA NA NA NA NA NA
爲什麼你說「有數據缺失,所以一個簡單的重塑不會做」?你試過了嗎?什麼沒有解決方案的工作?如果您提供一個(小)可重複的示例來說明您期望遇到的情況/問題,那麼您更有可能獲得有意義的幫助。 – A5C1D2H2I1M1N2O1R2T1
'library(reshape2); DataMatrix < - dcast(Data3,col1〜col2,value.var =「col3」)'? – lukeA
謝謝阿南達 - 你是對的 - 玩耍無疑是前進的方向。我認爲可能會有一些匹配或查找功能,我不知道。 缺失的數據意味着Data3不是18000 * 500長,但更少。因此,重塑災難。 – user3173922