Как мне найти пиковые значения / номера строк?

StackOverflow https://stackoverflow.com/questions/1576201

  •  21-09-2019
  •  | 
  •  

Вопрос

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

Как мне найти / вернуть список номеров строк, где значения > 0,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.

Другие советы

which(x > 0.5)

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

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

Использование аргумента 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top