我有一个读取大型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)
Hug*_*ugh 16
如果你data.frame
是a data.table
,你可以使用特殊符号.I
:
data[, ID := .I]
Run Code Online (Sandbox Code Playgroud)
好吧,如果我理解正确的话.您可以执行以下操作.
为了展示它,我首先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)
或者只是重置列.