假设我有两个矩阵c1
和c2
。我想删除中所有c1
重复的行c2
。
我可以做2个嵌入的for
循环,它们扫描c1
和扫描c2
,但是对于大型矩阵来说这太慢了。我需要一个向量化函数。
函数row.match
将是完美的,但它仅返回重复项的第一个实例。我需要找到并删除所有这些。
样本数据:
c1 <- matrix( c(1, 0, 2, 0, 2, 5), byrow = TRUE, nrow = 3)
c2 <- matrix(c(1, 1, 2, 5, 3, 2), byrow = TRUE, nrow = 3)
c1
#> [,1] [,2]
#> [1,] 1 0
#> [2,] 2 0
#> [3,] 2 5
c2
#> [,1] [,2]
#> [1,] 1 1
#> [2,] 2 5
#> [3,] 3 2
#DATA
c1 <- matrix( c(1, 0, 2, 5, 4, 5), byrow = TRUE, nrow = 3)
c2 <- matrix(c(1, 1, 2, 5, 3, 2), byrow = TRUE, nrow = 3)
#Paste the rows together for c1 and c2
c1_s = apply(c1, 1, paste, collapse = ", ")
c2_s = apply(c2, 1, paste, collapse = ", ")
#Get elements common in c1_s and c1_2
c1_c2 = intersect(c1_s, c2_s)
#Present only in c1
c1[!c1_s %in% c1_c2,]
# [,1] [,2]
#[1,] 1 0
#[2,] 4 5
#Present only in c2
c2[!c2_s %in% c1_c2,]
# [,1] [,2]
#[1,] 1 1
#[2,] 3 2
#Present in both
c1[c1_s %in% c1_c2, , drop = FALSE]
# [,1] [,2]
#[1,] 2 5
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句