本文介绍了创建一个ID(行号)列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我需要创建一个具有唯一ID的列,基本上将行号添加为自己的列.我当前的数据框如下所示:
I need to create a column with unique ID, basically add the row number as an own column. My current data frame looks like this:
V1 V2
1 23 45
2 45 45
3 56 67
如何使其看起来像这样:
How to make it look like this:
V1 V2 V3
1 23 45
2 45 45
3 56 67
?
非常感谢
推荐答案
您可以使用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
慢):
Here a comparison of @dacko suggestions. d$id <- seq_len(nrow(d)
is slightly faster, but the order of the columns is different (id
is the last column; reorder them seems to be slower than using 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
这篇关于创建一个ID(行号)列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!