Предположим, что у меня есть список или кадр данных в R, и я хотел бы получить индекс строки, как мне это сделать? То есть, я хотел бы знать, сколько строк содержит определенную матрицу.
Как получить номер индекса строки в R?
Ответ 1
Я интерпретирую ваш вопрос как получить номера строк.
- Вы можете попробовать
as.numeric(rownames(df))
, если вы не задали имена розеров. В противном случае используйте последовательность1:nrow(df)
. - Функция
which()
преобразует индекс строки TRUE/FALSE в номера строк.
Ответ 2
Не совсем понятно, что именно вы пытаетесь сделать.
Для ссылки на строку в кадре данных используйте df[row,]
Чтобы получить первую позицию в векторе чего-либо, используйте match(item,vector)
, где вектор может быть одним из столбцов вашего фрейма данных, например df$cname
, если имя столбца является cname.
Edit:
Чтобы объединить их, вы должны написать:
df[match(item,df$cname),]
Обратите внимание, что совпадение дает вам первый элемент в списке, поэтому, если вы не ищете уникальный ссылочный номер, вы можете рассмотреть что-то еще.
Ответ 3
См. row
в ?base::row
. Это дает индексы строк для любого матричноподобного объекта.
Ответ 4
Если я понимаю ваш вопрос, вы просто хотите иметь доступ к элементам в кадре данных (или списке) по строке:
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
и др.
Ответ 5
Возможно, этот дополнительный пример "матча" будет полезен.
Имея два набора данных:
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