将索引(数字ID)列添加到大数据框

时间:2014-05-07 13:02:32

标签: r dataframe

我有一个读取大型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就不再是唯一的ID,这会导致所有分析。我想在user_id之前添加另一列,类似于"generated_uid",并且几乎使用该列填充的data.frame索引。什么是实现这一目标的最佳方式。

4 个答案:

答案 0 :(得分:130)

您可以使用

轻松添加一系列数字
data$ID <- seq.int(nrow(data))

当然,它没有任何实际意义,因此可能无法用于分析。

如果您已使用library(tidyverse),则可以使用

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

答案 1 :(得分:35)

使用替代 dplyr 包:

library("dplyr") # or library("tidyverse")

df <- df %>% mutate(id = row_number())

答案 2 :(得分:9)

如果您的data.framedata.table,则可以使用特殊符号.I

data[, ID := .I]

答案 3 :(得分:5)

好吧,如果我理解正确的话。您可以执行以下操作。

要展示它,我首先使用您的示例

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

然后,您可以运行以下行之一,以使用行号作为生成的用户ID添加列(在data.frame的末尾)。第二行只是添加前导零。

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

如果您绝对希望生成的用户ID成为第一列,则可以像这样添加列:

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

或简单地重置列。