如何根据 R 中的条件对矩阵中的值进行子集化

问题描述 投票:0回答:1

我有一个矩阵:

A = matrix(1:20,nrow = 5,ncol = 4,byrow = TRUE)

和一个向量:

B = c(1,4,11,14,15,20)

我想在这些条件下从每一行获取一个值: 如果A的一行与B有多个匹配项,则只取该行中的第一个匹配项; 如果A的一行只有一个匹配,则取这个匹配的值; 如果 A 的某一行没有匹配项,则取该行的第 1 列。 因此,预期结果附加在 A 的最后一列(作为数据框)。

      V1 V2 V3 V4 result
    1  1  2  3  4      1
    2  5  6  7  8      5
    3  9 10 11 12     11
    4 13 14 15 16     14
    5 17 18 19 20     20

感谢您的帮助!

r dataframe matrix
1个回答
0
投票
data.frame(A, result=A[cbind(seq_len(nrow(A)), max.col(array(A %in% B, dim(A)), 'first'))])

  X1 X2 X3 X4 result
1  1  2  3  4      1
2  5  6  7  8      5
3  9 10 11 12     11
4 13 14 15 16     14
5 17 18 19 20     20
© www.soinside.com 2019 - 2024. All rights reserved.