2016-03-14 10 views
1

Я читаю данные, которые содержат 112 переменных и 1000 наблюдений из текстовых файлов в формате data.frame и хотят выбирать только те строки, у которых есть положительные числа в столбцах 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) 
} 

ответ

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)] 
Смежные вопросы