Как получить номер индекса строки в R?

Предположим, у меня есть список или фрейм данных в R, и я хотел бы получить индекс строки, как мне это сделать? То есть я хотел бы знать, из скольких строк состоит определенная матрица.


person lesbegue's alter ego    schedule 03.03.2010    source источник
comment
Вопрос еще очень неясно сформулирован.   -  person reinierpost    schedule 14.12.2011
comment
Я думаю, это потому, что это два вопроса: второе предложение - это то, на что @BenBolker ответил nrow(x) (т.е. дает размеры фрейма данных). Первое предложение касается получения номеров строк, на которое Шейн ответил (и улучшил naught1) as.integer(rownames(x))   -  person Assad Ebrahim    schedule 07.11.2013


Ответы (7)


Я интерпретирую ваш вопрос как получение номеров строк.

  • Вы можете попробовать as.numeric(rownames(df)), если вы не установили имена строк. В противном случае используйте последовательность 1:nrow(df).
  • Функция which() преобразует индекс строки TRUE/FALSE в номера строк.
person Shane    schedule 03.03.2010
comment
Я тоже так делаю, поскольку имена строк DF, даже если они числовые, не обязательно соответствуют индексу строки: row(cars[34:50,])[,1]; as.integer(rownames(cars[34:50,])). Почему вы используете as.numeric() здесь? Не лучше ли использовать as.integer()? - person naught101; 16.08.2012

Не совсем понятно, что именно вы пытаетесь сделать.

Чтобы сослаться на строку во фрейме данных, используйте df[row,]

Чтобы получить первую позицию в векторе чего-либо, используйте match(item,vector), где вектор может быть одним из столбцов вашего фрейма данных, например, df$cname, если имя столбца - cname.

Редактировать:

Чтобы объединить их, вы должны написать:

df[match(item,df$cname),]

Обратите внимание, что совпадение дает вам первый элемент в списке, поэтому, если вы не ищете уникальный ссылочный номер, вы можете рассмотреть что-то другое.

person James    schedule 03.03.2010
comment
Это хороший ответ на вопрос, отличный от того, который, как мне кажется, задает альтер-эго @lebesgue. Если вы наберете head(df), появятся заголовки для всех столбцов, кроме идентификатора строки. Поэтому я думаю, что @lebesgue ищет функцию, которая позволит получить доступ к идентификатору строки (функция row). - person isomorphismes; 05.03.2012

См. row в ?base::row. Это дает индексы строк для любого матричного объекта.

person Dean Eckles    schedule 20.06.2011

rownames(dataframe)

Это даст вам индекс фрейма данных

person vishal    schedule 29.04.2020
comment
Но обратите внимание, что он вернет индекс строки (который на самом деле является числовым) в виде вектора символов, поэтому вам придется преобразовать его обратно в числовой для многих ситуаций (например, для построения графика). - person Migwell; 22.01.2021
comment
Да, мне нравится это решение, потому что оно простое, но, возможно, as.numeric(rownames(dataframe)) было бы лучше. - person arranjdavis; 27.05.2021

Если я понимаю ваш вопрос, вы просто хотите иметь доступ к элементам во фрейме данных (или списке) по строке:

x = matrix( ceiling(9*runif(20)), nrow=5  )   
colnames(x) = c("col1", "col2", "col3", "col4")
df = data.frame(x)      # create a small data frame

df[1,]                  # get the first row
df[3,]                  # get the third row
df[nrow(df),]           # get the last row

lf = as.list(df)        

lf[[1]]                 # get first row
lf[[3]]                 # get third row

и т.п.

person doug    schedule 03.03.2010

Возможно, этот дополнительный пример «соответствия» будет полезен.

Имея два набора данных:

first_dataset <- data.frame(name = c("John", "Luke", "Simon", "Gregory", "Mary"),
                            role = c("Audit", "HR", "Accountant", "Mechanic", "Engineer"))

second_dataset <- data.frame(name = c("Mary", "Gregory", "Luke", "Simon"))

Если столбец имени содержит только уникальные значения для всей коллекции (для всей коллекции), вы можете получить доступ к строке в другом наборе данных по значению индекса, возвращаемому совпадением.

name_mapping <- match(second_dataset$name, first_dataset$name)

match возвращает правильные индексы строк имен в first_dataset из заданных имен из второго: 5 4 2 1 пример здесь — доступ к ролям из первого набора данных по индексу строки (по заданному значению имени)

for(i in 1:length(name_mapping)) {
    role <- as.character(first_dataset$role[name_mapping[i]])   
    second_dataset$role[i] = role
}

===

second dataset with new column:
     name       role
1    Mary   Engineer
2 Gregory   Mechanic
3    Luke Supervisor
4   Simon Accountant

r

person szymon-m    schedule 30.11.2018

x <-  matrix(ceiling(9*runif(20)), nrow=5)
colnames(x) <-  c("these", "are", "the", "columnes")
df <-  data.frame(x)

Результат: кадр данных

which(df == "2")                       #returns rowIndexes results from the entire dataset, in this case it returns a list of 3 index numb

Результат:

5 13 17

length(which(df == "2"))               #count numb. of rows that matches the condition of ==2

Результат:

3

также вы можете сделать этот столбец мудрым, например:

which(df$columnName == c("2", "7"))     #you do the same with strings
length(which(df$columnName == c("2", "7")))
person Youness BAHI    schedule 25.03.2021