Вы читаете данные и создаете фреймы данных, а не матрицы. Это может повлиять на ваши результаты в дальнейшем, но не здесь, поскольку фреймы данных и матрицы обрабатываются по R по столбцам, поэтому вы получаете правильный ответ на свой вопрос, а не тот, который вам нужен. Самый простой подход - использовать t()
. Я создал фрейм данных из вашего примера с именем dta
:
min(which(dta == 1))
# [1] 159
min(which(t(dta) == 1))
# [1] 135
Большие матрицы работают просто отлично (ответ на комментарий ниже). Сначала создайте воспроизводимую матрицу.
dta <- matrix(0, 50, 50)
ones <- structure(c(25L, 22L, 27L, 9L, 31L, 38L, 32L, 2L, 9L, 50L, 7L,
19L, 40L, 47L, 26L, 1L, 47L, 34L, 16L, 23L, 39L, 3L, 30L, 50L,
11L, 3L, 41L, 28L, 22L, 15L, 50L, 31L, 28L, 38L, 16L, 25L, 14L,
22L, 12L, 11L, 40L, 44L, 1L, 38L, 7L, 39L, 1L, 39L, 33L, 50L,
16L, 15L, 4L, 37L, 25L, 25L, 18L, 9L, 21L, 32L, 47L, 49L, 17L,
48L, 26L, 7L, 4L, 47L, 16L, 11L, 35L, 17L, 25L, 23L, 24L, 4L,
12L, 23L, 8L, 38L, 19L, 32L, 8L, 35L, 1L, 48L, 42L, 45L, 43L,
45L, 30L, 41L, 5L, 5L, 49L, 37L, 19L, 20L, 48L, 43L), .Dim = c(50L,
2L), .Dimnames = list(NULL, c("row", "col")))
dta[ones] <- 1
dim(dta) # Show the number of rows and columns
# [1] 50 50
Вы можете просмотреть матрицу с помощью View(dta)
, прежде чем использовать следующий код:
min(which(dta == 1)) # By columns
# [1] 16
min(which(t(dta) == 1)) # By rows
# [1] 5