簡體   English   中英

在r中向量和矩陣之間的行方式比較

[英]row wise comparison between a vector and a matrix in r

我有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。 誰能糾正這個功能? 謝謝!

這個矢量化代碼應該非常有效:

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

您可以采取以下幾種方法

  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 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM