Предположим, у меня есть список или фрейм данных в R, и я хотел бы получить индекс строки, как мне это сделать? То есть я хотел бы знать, из скольких строк состоит определенная матрица.
Как получить номер индекса строки в R?
Ответы (7)
Я интерпретирую ваш вопрос как получение номеров строк.
- Вы можете попробовать
as.numeric(rownames(df))
, если вы не установили имена строк. В противном случае используйте последовательность1:nrow(df)
. - Функция
which()
преобразует индекс строки TRUE/FALSE в номера строк.
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),]
Обратите внимание, что совпадение дает вам первый элемент в списке, поэтому, если вы не ищете уникальный ссылочный номер, вы можете рассмотреть что-то другое.
head(df)
, появятся заголовки для всех столбцов, кроме идентификатора строки. Поэтому я думаю, что @lebesgue ищет функцию, которая позволит получить доступ к идентификатору строки (функция row
).
- person isomorphismes; 05.03.2012
См. row
в ?base::row
. Это дает индексы строк для любого матричного объекта.
rownames(dataframe)
Это даст вам индекс фрейма данных
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
и т.п.
Возможно, этот дополнительный пример «соответствия» будет полезен.
Имея два набора данных:
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
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")))
nrow(x)
(т.е. дает размеры фрейма данных). Первое предложение касается получения номеров строк, на которое Шейн ответил (и улучшил naught1)as.integer(rownames(x))
- person Assad Ebrahim   schedule 07.11.2013