Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何删除矩阵中的行_R_Matrix_Delete Row - Fatal编程技术网

R 如何删除矩阵中的行

R 如何删除矩阵中的行,r,matrix,delete-row,R,Matrix,Delete Row,我伪造了一个矩阵,如下所示 a = rep(1:4, each=2) b = rep(0:1, times=4) m = cbind(a, b) m a b [1,] 1 0 [2,] 1 1 [3,] 2 0 [4,] 2 1 [5,] 3 0 [6,] 3 1 [7,] 4 0 [8,] 4 1 我需要删除a==4和b==0的任何行。我知道如何选择这样的行: m[m[,1]==4 & m[,2]==0,] a b 4 0 但我不知道如何移除它们。我知道在这种特殊情况下我可以做

我伪造了一个矩阵,如下所示

a = rep(1:4, each=2)
b = rep(0:1, times=4)
m = cbind(a, b)
m
a b
[1,] 1 0
[2,] 1 1
[3,] 2 0
[4,] 2 1
[5,] 3 0
[6,] 3 1
[7,] 4 0
[8,] 4 1
我需要删除a==4和b==0的任何行。我知道如何选择这样的行:

m[m[,1]==4 & m[,2]==0,]
a b 
4 0 
但我不知道如何移除它们。我知道在这种特殊情况下我可以做m[-7,]。但想象一下,这是一个巨大的矩阵,我无法直观地检查哪些行满足a==4和b==0的条件。我也试过:

count=1:8
m.count = cbind(m, count)
m.count[m.count[,1]==4 & m.count[,2]==0,]
a     b count 
4     0     7 
因此,这将自动告诉我哪些行符合条件,然后如果只有一行,我可以使用索引c=count[3],如果有多行,我可以使用索引c=count[,3],然后尝试m[-c,]以获得正确的结果

但这个解决方案太长了。有人知道解决这个问题的简单方法吗?我希望用一些聪明的方法来使用-我想你只需要哪个

我想你需要的是什么


只需反转选择行的条件:

m[! (m[, 1] == 4 & m[, 2] == 0), ]
或者实际上根据:


只需反转选择行的条件:

m[! (m[, 1] == 4 & m[, 2] == 0), ]
或者实际上根据:


这不是有用的吗?还是我遗漏了什么?m[-哪个,,]这里哪个有用或者我遗漏了什么?m[-哪个.,]@KonradRudolph我实际上不确定它是不是…更不用说它比典型的否定更容易理解。你是说-哪个…比…更容易理解!…?关于基准测试,请注意,您所进行的基准测试主要是rep的性能,而不是操作的性能:操作只执行一次,然后连接10000000次。因此,性能上的差异是虚假的。使用microbenchmark软件包,我发现了以下区别:–换句话说:在数据帧上,你的速度更快;关于矩阵,我的。或者,同样可能的是:这几乎没有什么区别。-这是一个不-不,看看如果没有比赛会发生什么。试试x来吧。。。我给你一个正数向量,让你去掉所有负数。你应该什么都不移除吗?x[!x<0]是唯一合理的答案。@KonradRudolph我实际上不确定它是否……更不用说它比典型的否定更容易理解。你是在争论——哪个……比……更容易理解!…?关于基准测试,请注意,您所进行的基准测试主要是rep的性能,而不是操作的性能:操作只执行一次,然后连接10000000次。因此,性能上的差异是虚假的。使用microbenchmark软件包,我发现了以下区别:–换句话说:在数据帧上,你的速度更快;关于矩阵,我的。或者,同样可能的是:这几乎没有什么区别。-这是一个不-不,看看如果没有比赛会发生什么。试试x来吧。。。我给你一个正数向量,让你去掉所有负数。你应该什么都不移除吗?x[!x<0]是唯一合理的答案。谢谢康拉德。这真的很有帮助。为什么我一开始就看不见呢?谢谢康拉德。这真的很有帮助。为什么我一开始就看不见呢?
m[! (m[, 1] == 4 & m[, 2] == 0), ]
m[m[, 1] != 4 | m[, 2] != 0, ]