Supposons que j'ai une liste ou un cadre de données dans R et que j'aimerais obtenir l'index de ligne, comment puis-je le faire? C'est-à-dire que j'aimerais savoir combien de lignes une matrice donnée contient.
J'interprète votre question comme visant à obtenir des numéros de rangée.
as.numeric(rownames(df))
si vous n'avez pas défini les noms de domaine. Sinon, utilisez une séquence de 1:nrow(df)
. which()
convertit un index de ligne TRUE/FALSE en numéros de ligne. Ce que vous essayez de faire n'est pas très clair.
Pour référencer une ligne dans un bloc de données, utilisez df[row,]
Pour obtenir la première position dans un vecteur de quelque chose, utilisez match(item,vector)
, où le vecteur pourrait être l'une des colonnes de votre cadre de données, par exemple df$cname
si le nom de la colonne est cname.
Modifier:
Pour les combiner, vous écririez:
df[match(item,df$cname),]
Notez que la correspondance vous donne le premier élément de la liste. Par conséquent, si vous ne recherchez pas un numéro de référence unique, vous voudrez peut-être envisager autre chose.
Voir row
dans ?base::row
. Cela donne les index de ligne pour tout objet de type matrice.
Si je comprends votre question, vous voulez simplement pouvoir accéder aux éléments d’un bloc de données (ou d’une liste) par ligne :
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
etc.
Cet exemple complémentaire de "match" serait peut-être utile.
Avoir deux jeux de données:
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"))
Si la colonne de nom contient uniquement des valeurs uniques parmi les collections (dans l'ensemble de la collection) .__, vous pouvez accéder aux lignes d'un autre ensemble de données par la valeur de l'index renvoyé par la correspondance.
name_mapping <- match(second_dataset$name, first_dataset$name)
match renvoie les index de ligne appropriés des noms dans first_dataset à partir des noms donnés en deuxième: 5 4 2 1
exemple ici - accès aux rôles du premier ensemble de données par index de ligne
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