考虑以下矩阵:
testMat <- matrix(c(1,2,1,3,
3,2,3,3,
1,3,1,3,
2,3,3,3,
3,3,3,3,
3,2,3,1), byrow = T, ncol = 4)
和以下条件:
cond <- c(0,0) # binary
**问题:**如果cond[1]
为0
,并且第一列或第三列中存在1
,则将移去相应的行。同样,如果cond[2]
为0
,并且第二列或第四列中存在1
,则将移去相应的行。例如,新矩阵将为:
newMat <- testMat[-c(1,3,6),] # for cond <- c(0,0)
newMat <- testMat[-c(1,3),] # for cond <- c(0,1)
newMat <- testMat[-c(6),] # for cond <- c(1,0)
newMat <- testMat # for cond <- c(1,1)
我试着用下面的方式,但这既错误又笨拙
newMat <- testMat[-(cond[1] == 0 & testMat[,c(1,3)] == 1),]
newMat <- newMat[-(cond[2] == 0 & newMat[,c(2,4)] == 1),]
你能帮忙找到一个R基溶液吗?
2条答案
按热度按时间7d7tgy0s1#
这是丑陋的,但似乎工作:
(对于
cond
的长度是一般化的,假设矩阵具有length(cond)*2
列)(根据评论编辑)
0s0u357o2#
假设1)cond可以是任意长度,2)testMat具有偶数列,以及3)规则是查看testMat的第i列和第(i+2)列
返回满足您的条件的行,则可以删除这些行