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

add*_*ons 65 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
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,一旦我将数据带入数据框,user_id就不再是唯一的ID,这会导致所有分析.我试图添加另一个列之前的user_id类似的东西,"generated_uid"并且几乎使用该data.frame列填充的索引.什么是实现这一目标的最佳方式.

MrF*_*ick 153

您可以非常轻松地添加一系列数字

data$ID <- seq.int(nrow(data))
Run Code Online (Sandbox Code Playgroud)

当然,它没有任何实际意义,因此它可能不适用于分析.

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

data <- tibble::rowid_to_column(data, "ID")
Run Code Online (Sandbox Code Playgroud)


wos*_*hui 49

使用替代dplyr包:

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

df <- df %>% mutate(id = row_number())
Run Code Online (Sandbox Code Playgroud)

  • 这种方法也适用于在组内创建唯一标识符:`df &lt;- df %&gt;% group_by(group_var) %&gt;% mutate(id = row_number())`。在每个组中,“id”从 1 计数到 n。 (4认同)

Hug*_*ugh 16

如果你data.frame是a data.table,你可以使用特殊符号.I:

data[, ID := .I]
Run Code Online (Sandbox Code Playgroud)


And*_*rau 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")  
Run Code Online (Sandbox Code Playgroud)

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

df$generated_uid  <- 1:nrow(df)
df$generated_uid2 <- sprintf("%03d", 1:nrow(df))
Run Code Online (Sandbox Code Playgroud)

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

df <- cbind("generated_uid3" = sprintf("%03d", 1:nrow(df)), df)
Run Code Online (Sandbox Code Playgroud)

或者只是重置列.