在R中的两个矩阵中配对元素

时间:2013-06-19 17:34:08

标签: r data-manipulation

我试图将两个矩阵中的元素配对,这两个矩阵由以下代码块生成:

    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"

编辑:添加引号以避免混淆。 :)

2 个答案:

答案 0 :(得分:5)

如果你想要一个双列矩阵(而不是逗号分隔值的向量),你可以使用这种方法:

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

答案 1 :(得分: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"