J'ai lu un gros fichier csv dans un cadre de données. Les données contenues dans le fichier csv proviennent de plusieurs sites Web représentant des informations sur l'utilisateur. Par exemple, voici la structure du bloc de données.
user_id, number_of_logins, number_of_images, web
001, 34, 3, aa.com
002, 4, 4, aa.com
034, 3, 3, aa.com
001, 12, 4, bb.com
002, 1, 3, bb.com
034, 2, 2, cc.com
comme vous pouvez le voir une fois que j'apporte les données dans la trame de données, user_id n'est plus un identifiant unique, ce qui entraîne toute l'analyse. J'essaie d'ajouter d'autres colonnes avant user_id
qui s'apparente à "generated_uid"
et j'utilise assez bien l'index du data.frame
à remplir par cette colonne. Quel est le meilleur moyen d'y parvenir?.
Vous pouvez très facilement ajouter une séquence de chiffres avec
data$ID <- seq.int(nrow(data))
Bien sûr, cela n’aura pas de véritable sens, il pourrait donc ne pas être utile en analyse.
Si vous utilisez déjà library(tidyverse)
, vous pouvez utiliser
data <- tibble::rowid_to_column(data, "ID")
Utilisation du package dplyr alternatif:
library("dplyr") # or library("tidyverse")
df <- df %>% mutate(id = row_number())
Si votre data.frame
est un data.table
, vous pouvez utiliser le symbole spécial .I
:
data[, ID := .I]
Eh bien, si je vous comprends bien. Vous pouvez faire quelque chose comme ce qui suit.
Pour le montrer, je crée d'abord un data.frame
avec votre exemple
df <-
scan(what = character(), sep = ",", text =
"001, 34, 3, aa.com
002, 4, 4, aa.com
034, 3, 3, aa.com
001, 12, 4, bb.com
002, 1, 3, bb.com
034, 2, 2, cc.com")
df <- as.data.frame(matrix(df, 6, 4, byrow = TRUE))
colnames(df) <- c("user_id", "number_of_logins", "number_of_images", "web")
Vous pouvez ensuite exécuter l'une des lignes suivantes pour ajouter une colonne (à la fin du data.frame
) avec le numéro de la ligne comme identifiant d'utilisateur généré. Les deuxièmes lignes ajoutent simplement des zéros non significatifs.
df$generated_uid <- 1:nrow(df)
df$generated_uid2 <- sprintf("%03d", 1:nrow(df))
Si vous voulez absolument que l'ID utilisateur généré soit la première colonne, vous pouvez ajouter la colonne comme suit:
df <- cbind("generated_uid3" = sprintf("%03d", 1:nrow(df)), df)
ou simplement réorganiser les colonnes.