Подтвердить что ты не робот

Добавьте столбец индекса (числовой идентификатор) в большой фрейм данных

У меня есть большой файл csv для чтения в фрейм данных. Данные в CSV файле представлены на нескольких веб-сайтах, представляющих информацию пользователя. Например, вот структура кадра данных.

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

как вы можете видеть, как только я привожу данные в кадр данных, user_id больше не является уникальным идентификатором, и это вызывает весь анализ. Я пытаюсь добавить еще несколько столбцов до user_id, что-то вроде "generated_uid" и в значительной степени использует индекс data.frame для заполнения этим столбцом. Какой лучший способ это сделать.

4b9b3361

Ответ 1

Вы можете легко добавить последовательность чисел с помощью

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

Конечно, он не будет иметь никакого реального смысла, поэтому он может не пригодиться в анализе.

Если вы уже используете library(tidyverse), вы можете использовать

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

Ответ 2

Хорошо, если я правильно вас пойму. Вы можете сделать что-то вроде следующего.

Чтобы показать это, я сначала создаю data.frame с вашим примером

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

Затем вы можете запустить одну из следующих строк, чтобы добавить столбец (в конце data.frame) с номером строки в качестве сгенерированного идентификатора пользователя. Во второй строке просто добавляются ведущие нули.

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

Если вы абсолютно хотите, чтобы сгенерированный идентификатор пользователя был первым столбцом, вы можете добавить столбец так:

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

или просто повредить столбцы.