在索引为向量后保留返回的矩阵

时间:2019-05-27 15:44:51

标签: r matrix vector

我遵循了有关R语言的教程https://www.datamentor.io/r-programming/matrix/,该教程介绍了在索引矩阵而不是向量后如何保留返回的矩阵。但是,它不起作用,返回的矩阵的类别仍然是向量

我尝试使用一个逗号,然后使用两个逗号,如本教程中所示。

[1] 3 6 9
> class(x[x%%3==0])
[1] "integer"
> x[x%%3==0, drop=FALSE]
[1] 3 6 9
> class(x[x%%3==0, drop=FALSE])
[1] "integer"
> x[x%%3==0,, drop=FALSE]
Error in x[x%%3 == 0, , drop = FALSE] : 
  (subscript) logical subscript too long
> x[x%%3==0,,.drop=FALSE]
Error in x[x%%3 == 0, , .drop = FALSE] : incorrect number of dimensions
> x[x%%3==0,,drop=FALSE]
Error in x[x%%3 == 0, , drop = FALSE] : 
  (subscript) logical subscript too long
> class(x[x%%3==0, drop=FALSE])
[1] "integer"

该类仍然是整数,而不是矩阵,而drop = FALSE应该是这样做的

1 个答案:

答案 0 :(得分:0)

的输出
x %% 3==0
#     A     B     C
#X FALSE FALSE FALSE
#Y FALSE FALSE FALSE
#Z  TRUE  TRUE  TRUE

是逻辑矩阵

使用逻辑矩阵对初始矩阵进行子集化可以根据TRUE的位置给出元素

which(x%%3 == 0)
#[1] 3 6 9

在提取中获得的matrix中的值相同,这不会区分任何行,例如

x > 3
#     A    B    C
#X FALSE TRUE TRUE
#Y FALSE TRUE TRUE
#Z FALSE TRUE TRUE

x[x > 3]
#[1] 4 5 6 7 8 9

为了这样提取行,我们可能需要获取逻辑向量。一种选择是rowSums,并与列数进行比较

x[rowSums(x %%3 == 0) == ncol(x),, drop = FALSE]
#  A B C
#Z 3 6 9

数据

x <- matrix(1:9, nrow = 3, dimnames = list(c("X","Y","Z"), c("A","B","C")))