将行与向量

时间:2017-08-06 00:45:43

标签: r

我知道有关将表与向量进行比较的问题已被回答了几次,但似乎R出现了一个奇怪的错误,或者我错过了某些东西(可能是后者)。

我有一个3列矩阵或data.frame(这并不重要,因为同样的事情发生的任何一种方式),我想比较它的行与向量。而且我知道最简单的方法是通过apply(table==vector,1,sum)>(length(vector)-1),但由于我一直得到错误的行标记,我开始挖掘部分结果。下面是我的代码和R似乎正在做的错误。

transition_matrix<-cbind(permutations(n=7,r=4,v=c(0,1,2,3,4,5,6),repeats.allowed=T),prob=0,n=1)
vector<-c(1,0,1)
table <- transition_matrix[,c(1:3)]
table[59,]
>0 1 1
(table==vector)[59,]
>TRUE TRUE TRUE

所以我只是困惑地盯着我的代码,老实说不理解为什么它不起作用。我可能会遗漏一些东西,因为如果我直接将第59行与向量进行比较,我会得到正确的结果。

2 个答案:

答案 0 :(得分:1)

解释

当您将vectormatrix进行比较时,它会按列进行比较

请参阅以下可重现的示例

table <- matrix(c(rep(0,60),rep(1,60),rep(1,60)),ncol=3)
vector <- c(1,0,1)

head(table==vector)

      [,1]  [,2]  [,3]
[1,] FALSE  TRUE  TRUE
[2,]  TRUE FALSE FALSE
[3,] FALSE  TRUE  TRUE
[4,] FALSE  TRUE  TRUE
[5,]  TRUE FALSE FALSE
[6,] FALSE  TRUE  TRUE

1,1因为vector[1]==1table[1,1]==0而错误。 2,1为{0},因为vector[2]==0table[2,1]==0

解决方案

head(t(apply(table,1,function(x) x==vector)))

      [,1]  [,2] [,3]
[1,] FALSE FALSE TRUE
[2,] FALSE FALSE TRUE
[3,] FALSE FALSE TRUE
[4,] FALSE FALSE TRUE
[5,] FALSE FALSE TRUE
[6,] FALSE FALSE TRUE

答案 1 :(得分:1)

正如Chi Pak所说,var username = document.getElementById("steamAccountName").value document.getElementById("login_twofactorauth_message_entercode_accountname").innerText = username 正在按列操作,但您希望将每一行与向量进行比较。

获得所需行为的一种方法是在与向量进行比较之前转置矩阵,然后再重新转置。

示例数据:

table == vector

计算:

(table <- matrix(rep(0:2, 4), 4))
#      [,1] [,2] [,3]
# [1,]    0    1    2
# [2,]    1    2    0
# [3,]    2    0    1
# [4,]    0    1    2

(vector <- c(0, 0, 1))
# [1] 0 0 1

与使用t(t(table) == vector) # [,1] [,2] [,3] # [1,] TRUE FALSE FALSE # [2,] FALSE FALSE FALSE # [3,] FALSE TRUE TRUE # [4,] TRUE FALSE FALSE 的方法相比,这样做的一个优点是所有操作都是矢量化的,这意味着这对大型矩阵来说效率会更高。为了看到这一点,让我们看一下有一百万行的矩阵:

apply