我需要創建具有唯一ID的列。我現在的數據幀是這樣的:R基本知識:創建ID列
V1 V2
1 23 45
2 45 45
3 56 67
如何使它看起來像這樣:
V1 V2 V3
1 23 45
2 45 45
3 56 67
?非常感謝
我需要創建具有唯一ID的列。我現在的數據幀是這樣的:R基本知識:創建ID列
V1 V2
1 23 45
2 45 45
3 56 67
如何使它看起來像這樣:
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
慢):使用dplyr
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
你也可以這樣做:
DF <- mutate(DF, id = rownames(DF))
希望這將幫助 - 最短,最好的方法來創建ID列是 -
dataframe$ID <- seq.int(nrow(dataframe))
更容易語法和更快
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
爲什麼不'd $ ID < - seq_len(nrow(d))'然後'colnames(d)< - paste0( 「V」, 1:ncol(d))' – dickoa 2013-05-05 13:30:35
@dickoa:我只是沒有想到它。請參閱我的編輯。您的解決方案速度稍快,但不保留列的順序(但在大多數情況下,這並不重要)。 – sgibb 2013-05-05 15:34:38