-->

创建的ID(行号)柱(Create an ID (row number) column)

2019-09-02 00:57发布

我需要创建一个唯一的ID列,基本上添加行号作为自己的专栏。 我现在的数据帧是这样的:

   V1  V2
1  23  45
2  45  45
3  56  67

如何使它看起来就像这样:

V1  V2  V3
1  23  45
2  45  45
3  56  67

? 非常感谢

Answer 1:

你可以使用cbind

d <- data.frame(V1=c(23, 45, 56), V2=c(45, 45, 67))

## enter id here, you could also use 1:nrow(d) instead of rownames
id <- rownames(d)
d <- cbind(id=id, d)

## set colnames to OP's wishes
colnames(d) <- paste0("V", 1:ncol(d))

编辑:这一个的@dacko建议比较。 d$id <- seq_len(nrow(d)是稍快,但列的顺序是不同的( id是最后一列,对它们重新排序似乎比使用慢cbind ):

library("microbenchmark")

set.seed(1)
d <- data.frame(V1=rnorm(1e6), V2=rnorm(1e6))

cbindSeqLen <- function(x) {
  return(cbind(id=seq_len(nrow(x)), x))
}

dickoa <- function(x) {
  x$id <- seq_len(nrow(x))
  return(x)
}

dickoaReorder <- function(x) {
  x$id <- seq_len(nrow(x))
  nc <- ncol(x)
  x <- x[, c(nc, 1:(nc-1))]
  return(x)
}

microbenchmark(cbindSeqLen(d), dickoa(d), dickoaReorder(d), times=100)

# Unit: milliseconds
#             expr      min       lq   median       uq      max neval
#   cbindSeqLen(d) 23.00683 38.54196 40.24093 42.60020 47.73816   100
#        dickoa(d) 10.70718 36.12495 37.58526 40.22163 72.92796   100
# dickoaReorder(d) 19.25399 68.46162 72.45006 76.51468 88.99620   100


Answer 2:

你也可以做到这一点使用dplyr

DF <- mutate(DF, id = rownames(DF))


Answer 3:

两个tidyverse替代品(使用sgibb的示例数据):

tibble::rowid_to_column(d, "ID")

这使:

  ID V1 V2 1 1 23 45 2 2 45 45 3 3 56 67 

要么:

dplyr::mutate(d, ID = row_number())

这使:

  V1 V2 ID 1 23 45 1 2 45 45 2 3 56 67 3 

正如你所看到的, rowid_to_column -函数添加新列在其他的之前,而mutaterow_number() -combo添加其他后新列。


和另一个基础R替代:

d$ID <- seq_along(d[,1])


Answer 4:

data.table解决方案

更简单的语法和更快

library(data.table)

dt <- data.table(V1=c(23, 45, 56), V2=c(45, 45, 67))

setnames(dt, c("V2", "V3")) # changing column names
dt[, V1 := .I] # Adding ID column


Answer 5:

希望这会有所帮助。 创建ID列最短,最好的办法是:

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


Answer 6:

提出了很多自己的想法,但我觉得是这个任务的sortest和简单的代码:

data$ID <- 1:nrow(data)

一条线。 唯一的一个。



文章来源: Create an ID (row number) column