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。
任何人都可以纠正这个功能吗?谢谢!
您可以采用以下几种方法
申请两次
#
# 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)
使用 sapply 和 seq_along
sapply(seq_along(df2), function(x, y, i) y[i] %in% x[i, ], y = df2 ,x = df1)
重复df2到与df1
相同的长度,然后比较
rowSums(df1==rep(df2, length = length(df1))) > 0
这段矢量化代码应该非常高效:
> as.logical( rowSums(df1==df2))
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE FALSE
我有两个来自 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。
任何人都可以纠正这个功能吗?谢谢!
您可以采用以下几种方法
申请两次
# # 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)
使用 sapply 和
seq_along
sapply(seq_along(df2), function(x, y, i) y[i] %in% x[i, ], y = df2 ,x = df1)
重复df2到与
df1
相同的长度,然后比较rowSums(df1==rep(df2, length = length(df1))) > 0
这段矢量化代码应该非常高效:
> as.logical( rowSums(df1==df2))
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE FALSE