2009-10-16 3 views
1

У меня есть большой набор данных (202 тыс. Точек). Я знаю, что существует 8 значений более 0,5. Я хочу подмножество на этих строках.Как найти пиковые значения/номера строк?

Как найти/вернуть список номеров строк, где значения> 0,5?

+2

Вы сделали R тег выключен. Итак, на каком языке вы работаете? На вопрос нельзя ответить без какого-либо указания на окружающую среду. –

ответ

5

Если набор данных является вектор по имени x:

(1:length(x))[x > 0.5] 

Если набор данных является data.frame или матрица имени x и переменная интерес в колонке j:

(1:nrow(x))[x[,j] > 0.5] 

Но если вы просто хотите найти подмножество и не нужны номера строк, используйте

subset(x, x > 0.5) 

для вектора и

subset(x, x[,j] > 0.5) 

для матрицы или data.frame.

+1

Спасибо тонны! это и сделал трюк. Я как бы выяснил это сам, прежде чем узнал, что этот комментарий опубликован, но это именно то, что я сделал. – 2009-10-16 15:21:22

0

Вот некоторые фиктивные данные:

D<-matrix(c(0.6,0.1,0.1,0.2,0.1,0.1,0.23,0.1,0.8,0.2,0.2,0.2),nrow=3) 

Который выглядит следующим образом:

> D 
    [,1] [,2] [,3] [,4] 
[1,] 0.6 0.2 0.23 0.2 
[2,] 0.1 0.1 0.10 0.2 
[3,] 0.1 0.1 0.80 0.2 

А вот логический индекс строки,

index <- (rowSums(D>0.5))>=1 

Вы можете использовать его, чтобы извлечь строки, хочу:

PeakRows <- D[index,] 

который выглядит следующим образом:

> PeakRows 
    [,1] [,2] [,3] [,4] 
[1,] 0.6 0.2 0.23 0.2 
[2,] 0.1 0.1 0.80 0.2 
0

Используя аргумент arr.ind=TRUE с which является отличным способом для поиска строки (или столбца) чисел, где условие TRUE,

df <- matrix(c(0.6,0.2,0.1,0.25,0.11,0.13,0.23,0.18,0.21,0.29,0.23,0.51), nrow=4) 

#  [,1] [,2] [,3] 
# [1,] 0.60 0.11 0.21 
# [2,] 0.20 0.13 0.29 
# [3,] 0.10 0.23 0.23 
# [4,] 0.25 0.18 0.51 

which с arr.ind=TRUE возвращает индексы массива, где условие равно TRUE

which(df > 0.5, arr.ind=TRUE) 
    row col 
[1,] 1 1 
[2,] 4 3 

поэтому подмножество становится

df[-which(df > 0.5, arr.ind=TRUE)[, "row"], ] 

#  [,1] [,2] [,3] 
# [1,] 0.2 0.13 0.29 
# [2,] 0.1 0.23 0.23