在r中向量和矩阵之间的行方式比较

时间:2016-02-05 00:17:33

标签: r date-comparison

我有10个人的两个数据集。一个是矢量,另一个是矩阵。我想看到的是,如果向量的第一个元素包含在矩阵的第一行中,并且向量的第二个元素包含在矩阵的第二行中,依此类推。

所以,我将向量更改为矩阵,并使用apply逐行比较它们。但是,结果并不正确。

这是数据集。

df1<-matrix(c(rep(0,10),2,4,7,6,5,7,4,2,2,2),ncol=2)
df1
#      [,1] [,2]
# [1,]    0    2
# [2,]    0    4
# [3,]    0    7
# [4,]    0    6
# [5,]    0    5
# [6,]    0    7
# [7,]    0    4
# [8,]    0    2
# [9,]    0    2
#[10,]    0    2

df2<-c(1,3,6,4,1,3,3,2,2,5)
df2<-as.matrix(df2)
apply(df2, 1, function(x) any(x==df1))
# [1] FALSE FALSE  TRUE  TRUE FALSE FALSE FALSE  TRUE  TRUE  TRUE

但是,结果必须是FALSE,而是第8和第9。 谁能纠正这个功能?谢谢!

2 个答案:

答案 0 :(得分:5)

这个矢量化代码应该非常有效:

> as.logical( rowSums(df1==df2))
 [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE FALSE

答案 1 :(得分:4)

您可以采取以下几种方法

  1. 两次申请

    # 
    # 1 by column to check if the values are equal
    # then by row to see if any rows contain TRUE
    apply(apply(df1,2,`==`,df2),1,any)
    
  2. 使用sapply和seq_along

    sapply(seq_along(df2), function(x, y, i) y[i] %in% x[i, ], y = df2 ,x = df1)
    
  3. 将df2重复到与df1相同的长度,然后进行比较

     rowSums(df1==rep(df2, length = length(df1))) > 0