2013-06-19 40 views
1

我試圖配對元件在兩個矩陣,其由下面的代碼塊生成:配對元件中的R

set.seed(29) 
    y = rnorm(16) 
    yn = paste('n', 1:16, sep='') 
    y = embed(y, 3) 
    yn = embed(yn, 3) 
    ycomp = y[, rep(3, ncol(y))] 
    yncomp = yn[, rep(3, ncol(y))] 
    logitable = (ycomp - y) < 1 
    yn[logitable] = NA 
    yncomp[logitable] = NA 
    yn 
    #  [,1] [,2] [,3] 
    # [1,] NA NA NA 
    # [2,] NA NA NA 
    # [3,] "n5" NA NA 
    # [4,] NA "n5" NA 
    # [5,] NA NA NA 
    # [6,] "n8" "n7" NA 
    # [7,] NA NA NA 
    # [8,] NA NA NA 
    # [9,] NA NA NA 
    #[10,] NA NA NA 
    #[11,] NA NA NA 
    #[12,] "n14" "n13" NA 
    #[13,] NA NA NA 
    #[14,] NA NA NA 
    yncomp 
    #  [,1] [,2] [,3] 
    # [1,] NA NA NA 
    # [2,] NA NA NA 
    # [3,] "n3" NA NA 
    # [4,] NA "n4" NA 
    # [5,] NA NA NA 
    # [6,] "n6" "n6" NA 
    # [7,] NA NA NA 
    # [8,] NA NA NA 
    # [9,] NA NA NA 
    #[10,] NA NA NA 
    #[11,] NA NA NA 
    #[12,] "n12" "n12" NA 
    #[13,] NA NA NA 
    #[14,] NA NA NA 

預期的結果將是具有2列的矩陣這樣

"n3" "n5" 
    "n4" "n5" 
    "n6" "n7" 
    "n6" "n8" 
    "n12" "n14" 
    "n12" "n13" 

編輯:添加了引號,以避免混亂。 :)

+0

對於相同的索引,兩個矩陣總是不是「NA」嗎? –

+0

是的,我故意這樣做,實際上在我的項目中它會是這樣的。 :) – qed

+0

是否有任何特定的韻或在您的預期結果排序的原因? – A5C1D2H2I1M1N2O1R2T1

回答

5

如果你想有一個兩列的矩陣的結果(而不是逗號分隔值的向量),你可以使用這種方法:

both <- cbind(as.vector(yncomp), as.vector(yn)) 
both[!is.na(both[, 1]), ] 
+1

你可以使用'c'而不是'as.vector',以達到緩和:-) –

+0

很棒。我在想爲什麼我沒有想到這個! – qed

+0

@ Ferdinand.kraft,將使用'c'作爲副作用,但不一定是預期的用途。 – A5C1D2H2I1M1N2O1R2T1

1

如果你想要得到的對作爲載體列表:

result <- mapply(c, yncomp, yn, SIMPLIFY=FALSE) 
result[! is.na(names(result))] 

# $n3 
# [1] "n3" "n5" 
# 
# $n6 
# [1] "n6" "n8" 
# 
# $n12 
# [1] "n12" "n14" 
# 
# $n4 
# [1] "n4" "n5" 
# 
# $n6 
# [1] "n6" "n7" 
# 
# $n12 
# [1] "n12" "n13"