Ссылка на номер строки в R

Как я могу ссылаться на номер строки наблюдения? Например, если у вас есть data.frame, называемый "data", и вы хотите создать переменную data$rownumber, равную каждому номеру строки наблюдения, как бы вы это сделали, не используя цикл?

Ответ 1

Они представлены по умолчанию как rownames при создании data.frame.

R> df = data.frame('a' = rnorm(10), 'b' = runif(10), 'c' = letters[1:10])
R> df
            a          b c
1   0.3336944 0.39746731 a
2  -0.2334404 0.12242856 b
3   1.4886706 0.07984085 c
4  -1.4853724 0.83163342 d
5   0.7291344 0.10981827 e
6   0.1786753 0.47401690 f
7  -0.9173701 0.73992239 g
8   0.7805941 0.91925413 h
9   0.2469860 0.87979229 i
10  1.2810961 0.53289335 j

и вы можете получить к ним доступ с помощью команды rownames.

R> rownames(df)
 [1] "1"  "2"  "3"  "4"  "5"  "6"  "7"  "8"  "9"  "10"

если они вам нужны в виде чисел, просто принудийте числовое значение, добавив as.numeric, как в as.numeric(rownames(df)).

Вам не нужно добавлять их, как будто вы знаете, что ищете (например, df$c == 'i', вы можете использовать команду:

R> which(df$c =='i')
[1] 9

или если вы не знаете столбец

R> which(df == 'i', arr.ind=T)
     row col
[1,]   9   3

вы можете получить доступ к элементу с помощью df[9, 'c'] или df$c[9].

Если вы хотите добавить их, вы можете использовать df$rownumber <- as.numeric(rownames(df)), хотя это может быть менее надежным, чем df$rownumber <- 1:nrow(df), поскольку есть случаи, когда вы могли назначить rownames, чтобы они больше не были индексами по умолчанию ( какая команда будет продолжать возвращать номера индексов, даже если вы назначаете rownames).

Ответ 2

Просто:

data$rownumber = 1:nrow(Data)

Ответ 3

Это, наверное, самый простой способ:

data$rownumber = 1:dim(data)[1]

Возможно, стоит отметить, что если вы хотите выбрать строку по индексу строки, вы можете сделать это с помощью простой записи в виде скобок

data[3,]

vs.

data[data$rownumber==3,]

Итак, я не совсем уверен, что делает этот новый столбец.