R 求矩阵中的第一个正数
我试图在矩阵的每一行中找到第一个正数或非零数 在这里,我尝试复制我的数据集:R 求矩阵中的第一个正数,r,matrix,subset,R,Matrix,Subset,我试图在矩阵的每一行中找到第一个正数或非零数 在这里,我尝试复制我的数据集: x <- matrix(0,10,13) y <- seq(1,10,1) set.seed(1) for(i in 1:10){ x[y[i],c(y[i]:(y[i]+3))] <- runif(1,min = .5) } 我希望结果是每行第一个正数的索引,这样我就可以通过x[vec\u index]调用这些数字 有没有一种方法可以在没有for循环的情况下执行此操作?另一种方法是使用获
x <- matrix(0,10,13)
y <- seq(1,10,1)
set.seed(1)
for(i in 1:10){
x[y[i],c(y[i]:(y[i]+3))] <- runif(1,min = .5)
}
我希望结果是每行第一个正数的索引,这样我就可以通过x[vec\u index]
调用这些数字
有没有一种方法可以在没有for循环的情况下执行此操作?另一种方法是使用
获取数组索引,其中(x>0,arr.ind=TRUE)
,然后使用例如dplyr
获取第一列:
library(dplyr)
data.frame(which(x>0,arr.ind = T)) %>% group_by(row) %>% slice(which.min(col))
# # A tibble: 10 x 2
# # Groups: row [10]
# row col
# <int> <int>
# 1 1
# 2 2
# 3 3
# 4 4
# 5 5
# 6 6
# 7 7
# 8 8
# 9 9
# 10 10
库(dplyr)
data.frame(其中(x>0,arr.ind=T))%%>%groupby(row)%%>%slice(其中.min(col))
##A tible:10 x 2
##组:第[10]行
#行列
#
# 1 1
# 2 2
# 3 3
# 4 4
# 5 5
# 6 6
# 7 7
# 8 8
# 9 9
# 10 10
如果矩阵只包含值0和1,我们可以将max.col
与ties=“first”
一起使用,它将返回行中最高值的索引,如果是tie,则返回第一个索引
max.col(x, ties.method = "first")
#[1] 1 2 3 4 5 6 7 8 9 10
如果它包含0和1以外的值,我们可以通过将其与0进行比较来创建逻辑矩阵
x[1, 2] <- 3
max.col(x > 0, ties.method = "first")
#[1] 1 2 3 4 5 6 7 8 9 10
x[1,2]0,ties.method=“first”)
#[1] 1 2 3 4 5 6 7 8 9 10
哪个(x==1)做你需要的事?我需要每行第一个正数的索引。其中(x==1)将返回40个索引:[1]11121221231313334424344455354555664666775767778868889979899100108[37]110119120130VAL!我更正了这个问题。请尝试哪个(x>0,arr.ind=TRUE)
。由于我的数据集有不同的数字,我将其更改为随机数。对不起,误会了!我可以通过将随机数转换成1并得到子集来使用它。谢谢
x[1, 2] <- 3
max.col(x > 0, ties.method = "first")
#[1] 1 2 3 4 5 6 7 8 9 10