Я пытаюсь написать функцию, которая будет работать по ходу матрицы и возвращать два вектора, которые содержат номер столбца (x), в котором найдены первый и последний экземпляр 1.Однако есть некоторые условия.Мой реальный набор данных - 7042 строки и 841 столбец.
- Если в последнем столбце найдено 1, оба вектора возвращают ncols + 1
- Если 1 не встречается, оба вектора должны == 1
- Если 1 встречается в строке несколько раз, но разделяется только NA , вернуть максимальное число столбцов + 1
- Если 1 встречается в строке несколько раз,но отделяется любым 0 , возвращает максимальное и минимальное номера столбца + 1
- Если 1 встречается только один раз в строке, возвращает номер столбца + 1
Используя приведенный ниже примерный набор данных
structure(list(T1 = c(NA, NA, NA, 1L, NA, NA, NA, NA, NA), T2 = c(NA,
NA, NA, 0L, NA, NA, NA, NA, NA), T3 = c(NA, 3L, 3L, 0L, 3L, NA,
NA, 3L, 3L), T4 = c(NA, 4L, NA, 0L, 0L, NA, 4L, 0L, 4L), T5 = c(5L,
5L, 5L, 0L, 0L, NA, 0L, 5L, 0L)), row.names = c(NA, -9L), class = "data.frame")
+----+----+----+----+----+
| T1 | T2 | T3 | T4 | T5 |
+----+----+----+----+----+
| NA | NA | NA | NA | 1 |
| NA | NA | 1 | 1 | 1 |
| NA | NA | 1 | NA | 1 |
| 1 | 0 | 0 | 0 | 0 |
| NA | NA | 1 | 0 | 0 |
| NA | NA | NA | NA | NA |
| NA | NA | NA | 1 | 0 |
| NA | NA | 1 | 0 | 1 |
| NA | NA | 1 | 1 | 0 |
+----+----+----+----+----+
Вектор 1 должен возвращать c(6,6,6,2,4,1,5,6,5)
, тогда как вектор 2 должен возвращать c(6,6,6,2,4,1,5,4,5)
Моя первая попытка приведена ниже, но это только возвращаетОкончательная позиция, в которой 1 был найден в каждом столбце1 отделяются только NA или 0, а затем изменяют базу возвращаемого результатаd на какие значения их разделяют.