基于没有名称的多列的矩阵的逻辑子集
logical subset from a matrix based on multiple columns with no names
我正在从 data.frame 格式的文本文件中读取具有 112 个变量和 1000 个观察值的数据,并且只想 select 那些在列中具有正数的行 17:34 和 40、42、45 和 47:91。
为了评估从 17 到 34 的列,我使用了这个,但它没有用。
mydata= subset(mydata,mydata[,17:34] > 0 )
如何解决这个问题,并以紧凑的方式引用我要评估的所有这些列?
我也试过像下面这样使用循环,并且成功了,但我想知道是否有更简单的写法。
for (i in 17:34){
mydata= subset(mydata,mydata[,i] > 0 )
}
mydata= subset(mydata,mydata[,40] > 0 )
mydata= subset(mydata,mydata[,42] > 0 )
mydata= subset(mydata,mydata[,45] > 0 )
for (i in 47:91){
mydata= subset(mydata,mydata[,i] > 0 )
}
我们可以在非正逻辑矩阵上使用rowSums
,取反并对行进行子集化。
Subdf <- mydata[!rowSums(mydata[,c(17:34,40, 42, 45, 47:91)]<=0),]
使用一个可重现的小例子
set.seed(24)
mydata <- matrix(sample(-5:40, 10*30, replace=TRUE), ncol=10)
Subdf <- mydata[!rowSums(mydata[, c(1, 5, 7)]<=0),]
Subdf[,c(1,5,7)]
我正在从 data.frame 格式的文本文件中读取具有 112 个变量和 1000 个观察值的数据,并且只想 select 那些在列中具有正数的行 17:34 和 40、42、45 和 47:91。
为了评估从 17 到 34 的列,我使用了这个,但它没有用。
mydata= subset(mydata,mydata[,17:34] > 0 )
如何解决这个问题,并以紧凑的方式引用我要评估的所有这些列?
我也试过像下面这样使用循环,并且成功了,但我想知道是否有更简单的写法。
for (i in 17:34){
mydata= subset(mydata,mydata[,i] > 0 )
}
mydata= subset(mydata,mydata[,40] > 0 )
mydata= subset(mydata,mydata[,42] > 0 )
mydata= subset(mydata,mydata[,45] > 0 )
for (i in 47:91){
mydata= subset(mydata,mydata[,i] > 0 )
}
我们可以在非正逻辑矩阵上使用rowSums
,取反并对行进行子集化。
Subdf <- mydata[!rowSums(mydata[,c(17:34,40, 42, 45, 47:91)]<=0),]
使用一个可重现的小例子
set.seed(24)
mydata <- matrix(sample(-5:40, 10*30, replace=TRUE), ncol=10)
Subdf <- mydata[!rowSums(mydata[, c(1, 5, 7)]<=0),]
Subdf[,c(1,5,7)]