2014-05-07 12 views
28

Mam duży plik csv do odczytu w ramce danych. Dane w pliku csv pochodzą z wielu witryn internetowych reprezentujących informacje o użytkowniku. Na przykład tutaj jest struktura ramki danych.Dodaj kolumnę indeksu (numerycznego identyfikatora) do dużej ramki danych

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 

jak widać po wprowadzeniu danych do ramki danych id_użytkownika nie jest już unikalnym identyfikatorem, co powoduje całą analizę. Próbuję dodać inne kolumny przed user_id, która jest podobna do "generated_uid" i prawie używać indeksu data.frame do wypełnienia przez tę kolumnę. Jaki jest najlepszy sposób, aby to osiągnąć.

+3

Prostym sposobem jest dodanie nowej kolumny z rosnącymi liczbami: 'data.frame $ generated_uid <- 1: nrow (data.frame)' –

Odpowiedz

69

Możesz dodać ciąg liczb bardzo łatwo

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

Oczywiście będzie to miało żadnego realnego znaczenia, więc nie może mieć zastosowania w analizie.

Jeśli już używasz library(tidyverse), można użyć

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

dobrze, jeśli cię rozumiem poprawnie. Możesz zrobić coś takiego.

Aby pokazać, że najpierw utworzyć data.frame z przykładu

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

Następnie można uruchomić jedną z następujących liniach dodać kolumnę (w końcu data.frame) z numerem wiersza jako wygenerowany identyfikator użytkownika. Druga linia po prostu dodaje początkowe zera.

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

Jeśli koniecznie chcesz wygenerowany identyfikator użytkownika, aby być w pierwszej kolumnie, można dodać kolumnę tak:

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

lub po prostu rearrage kolumny.

Powiązane problemy