如果行中的两个数字都是<;0或>;R中的0?
这是我的矩阵如果行中的两个数字都是<;0或>;R中的0?,r,matrix,subset,R,Matrix,Subset,这是我的矩阵 [,1] [,2] M -1 -5 T 8 -4 W -3 9 Th 4 5 F 7 -2 我希望我的输出包括星期一和星期四 这是我的代码,但我想看看是否可以使用其中一个apply()函数一起显示输出,并获得更高效的代码 m[m[,1]<0 & m[,2]<0,, drop=FALSE]
[,1] [,2]
M -1 -5
T 8 -4
W -3 9
Th 4 5
F 7 -2
我希望我的输出包括星期一和星期四
这是我的代码,但我想看看是否可以使用其中一个apply()函数一起显示输出,并获得更高效的代码
m[m[,1]<0 & m[,2]<0,, drop=FALSE]
m[m[,1]>0 & m[,2]>0,,drop=FALSE]
``
m[m[,1]0,drop=FALSE]
``
是的,您可以像这样使用apply
:
m[apply(m,1,函数(x)diff(符号(x))==0]
#> [,1] [,2]
#>M-1-5
#>Th 4 5
数据
m[,1][,2]
#>M-1-5
#>T 8-4
#>W-3 9
#>Th 4 5
#>F 7-2
一个简单的基本R选项
m[do.call("*",asplit(m,2))>0,]
给
[,1] [,2]
M -1 -5
Th 4 5
带有
行和的选项
m[!rowSums(m < 0)|!rowSums(m > 0),]
# [,1] [,2]
#M -1 -5
#Th 4 5
m[!行和(m<0)|!行和(m>0),]
# [,1] [,2]
#M-1-5
#Th 4 5
数据
m给定您的输入,您可以在%c(0,2)中执行m[行和(m>0)]
您不需要应用(隐藏循环),而是将逻辑条件与或结合起来:m[(m[,1]0),drop=FALSE]
我的输出是-14-5。我如何以矩阵形式输出它?@MaryJ你可以做matrix(output,nrow=2)
m <- structure(c(-1L, 8L, -3L, 4L, 7L, -5L, -4L, 9L, 5L, -2L), .Dim = c(5L,
2L), .Dimnames = list(structure(c("M", "T", "W", "Th", "F"), .Dim = c(5L,
1L), .Dimnames = list(NULL, "V1")), NULL))