2015-08-13 2 views
0

У меня есть матрица, и мне нужно найти индекс, который соответствует следующим условиям:
1.Впервые значение больше 90 (first90)
2. Индекс для столбца, соответствующего первому вхождению нулевого значения значения после первого 90 и остальных записей в столбце, равен нулю.Индекс первого появления всех оставшихся столбцов = 0 после первого появления x> значение

Например, в df.ex строки, соответствующие этим условиям, равны 2 и 4. Правильный индекс столбца равен 5 для строк 2 и 4 для строки 4.
Строки 1 и 3 имеют записи более 90, но некоторые столбцов справа от них отличны от нуля (30 в строках 1, 20 и 49 в строке 3).
Получил первую часть, используя max col, борясь со второй частью.
Любые идеи оценили.

df.ex=matrix(c(
     0,57,92,0,30,0, 
     190,99,30,100,0,0, 
     0,91,0,0,20,49, 
     15,121,0,0,0,0), 
     nrow=4,ncol=6,byrow=T) 

first.oc<-max.col(df.ex > 90, "first") 

Обновление: отредактирована матрица. Сделать это немного яснее (слишком долго смотрел на это). Я ищу индекс столбца после первого значения больше 90 (есть) и где остальные записи строки равны нулю. В слегка измененном примере, для строки 4, col 2> 90, я ищу способ найти индекс для col 3 (0, за которым следуют последовательные 0).

+0

Каков ожидаемый результат для вашего примера? –

+0

Привет, вектор индексов столбцов. Их можно комбинировать со строками для подмножества матрицы. – RVNorman

+0

Вы ищете логический вектор, который идентифицирует строки, в которых выполняются условия, или вектор с номером столбца в каждой строке, который удовлетворяет вашим условиям (и, предположительно, что-то вроде NA для строк, где условия не выполняются)? – ulfelder

ответ

1

Как это?

df.ex.t <- as.data.frame(t(df.ex)) 
above.90 <- sapply(df.ex.t, function(x) which.max(x > 90)) 
trailing.0 <- sapply(df.ex.t, function(x) which.max(rev(x) > 0)) 
index <- as.logical(trailing.0 > above.90) 
first.0 <- sapply(df.ex.t[,index], function(x) which.max(x == 0)) 

Результат:

> first.0 
V2 V4 
5 4 
Смежные вопросы