2014-05-07 12 views
28

Ho un file csv di grandi dimensioni in un frame di dati. I dati nel file csv provengono da più siti Web che rappresentano le informazioni dell'utente. Ad esempio, ecco la struttura del frame dei dati.Aggiungere una colonna dell'indice (ID numerico) al riquadro dati grande

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 

come si può vedere, una volta mi mettono i dati nella cornice di dati user_id non è un ID univoco, e questo fa sì che tutte le analisi. Sto cercando di aggiungere altre colonne prima di user_id che è qualcosa come "generated_uid" e praticamente uso l'indice dello data.frame da riempire da quella colonna. Qual è il modo migliore per farlo.

+3

un approccio semplice consiste nell'aggiungere nuova colonna con numeri crescenti: 'data.frame $ generated_uid <- 1: nrow (data.frame)' –

risposta

69

È possibile aggiungere una sequenza di numeri molto facilmente con

data$ID <- seq.int(nrow(data)) 

Naturalmente non avrà alcun significato reale quindi potrebbe non essere utile in analisi.

Se si sta già utilizzando library(tidyverse), è possibile utilizzare

data <- tibble::rowid_to_column(data, "ID") 
5

Beh, se ho capito bene. Puoi fare qualcosa come il seguente.

Per vederlo, ho prima creare una data.frame con il vostro esempio

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") 

È quindi possibile eseguire una delle seguenti righe di aggiungere una colonna (alla fine del data.frame) con il numero di riga come il ID utente generato. Le seconde righe aggiungono semplicemente zeri iniziali.

df$generated_uid <- 1:nrow(df) 
df$generated_uid2 <- sprintf("%03d", 1:nrow(df)) 

Se si vuole assolutamente l'ID utente generato per essere la prima colonna, è possibile aggiungere la colonna in questo modo:

df <- cbind("generated_uid3" = sprintf("%03d", 1:nrow(df)), df) 

o semplicemente rearrage le colonne.

Problemi correlati