首页 文章

将索引(数字ID)列添加到大数据框[重复]

提问于
浏览
49

这个问题在这里已有答案:

我有一个读取大型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 回答

  • 21

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

    data[, ID := .I]
    
  • 5

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

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

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

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

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

    使用替代dplyr包:

    library("dplyr") # or library("tidyverse")
    
    df <- df %>% mutate(id = row_number())
    
  • 112

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

    为了展示它,我首先用你的例子创建一个 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 的末尾),并将行号作为生成的用户ID . 第二行只是添加前导零 .

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

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

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

    或者只是重置列 .

相关问题