如何解决有没有一种方法可以在多个矩阵行上使用“哪个”功能而无需使用&多次?
我正在处理相对较大的矩阵(2197x100),需要快速选择特定的行。前7列是可以用来标识所需行的值,如本例所示:
design_matrix = matrix(c(rep(1:3,each = 729),rep(rep(1:3,each = 243),3),each = 81),9),each = 27),27),each = 9),81),each = 3),243),rep(1:3,729)),nrow = 2187)
我知道我可以使用函数which()
来查找具有特定值的矩阵行。我也知道我可以使用&来使用多个条件。由于我需要多次检查几个条目,因此我试图找到一种方法来执行以下操作:
which(design_matrix[,1:6] == c(1,1,1))
以获取具有相应值的行,在这种情况下为c(1,2,3)。取而代之的是,我得到每个元素比较的TRUE值。有没有一种方法可以不必使用mutliple&like
which((design_matrix[,1] == 1) & (design_matrix[,2] == 1) & (design_matrix[,3] == 1) &
(design_matrix[,4] == 1) & (design_matrix[,5] == 1) & (design_matrix[,6] == 1))
这是我想要的,但是每当我需要不同的值时都需要重写吗?
我正在使用which()
函数来像design_matrix[which(design_matrix[,1]==1),]
中那样对数据进行子集化,因此,如果有一种简单的方法可以使用subset
来完成我的问题。
解决方法
您可以将sweep
与边距2
一起使用,并将函数!=
和rowSums
与which
一起使用,以获取具有c(1,1,1)
的行。
which(rowSums(sweep(design_matrix[,1:6],2,c(1,1),"!="))==0)
#[1] 1 2 3
,
如果需要执行很多操作,则可以定义一个密钥以使查找变得平凡而又不花很多计算费用:
key <- apply(design_matrix,paste0,collapse = "")
design_matrix[key == "2133132",]
#> [1] 2 1 3 3 1 3 2
,
另一种解决方案是使用apply()
:
which(apply(design_matrix[,function(row)
all(row == c(1,1))
)
)
# [1] 1 2 3
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。