我有一个读取大型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
索引。什么是实现这一目标的最佳方式。
答案 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.frame
是data.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)
或简单地重置列。