it-swarm.com.de

Erstellen Sie eine ID (Zeilennummer) -Spalte

Ich muss eine Spalte mit eindeutiger ID erstellen. Die Zeilennummer muss als eigene Spalte hinzugefügt werden. Mein aktueller Datenrahmen sieht so aus:

   V1  V2
1  23  45
2  45  45
3  56  67

Wie es so aussehen soll:

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

? Danke vielmals

16
user10745

Sie könnten cbind verwenden:

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))

EDIT: Hier ein Vergleich von @dacko-Vorschlägen. d$id <- seq_len(nrow(d) ist etwas schneller, aber die Reihenfolge der Spalten ist unterschiedlich (id ist die letzte Spalte; die Reihenfolge der Spalten scheint langsamer zu sein als die Verwendung von 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
18
sgibb

Sie können dies auch mit dplyr tun:

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

Zwei tidyverse alternatives (unter Verwendung der Beispieldaten von sgibb):

tibble::rowid_to_column(d, "ID")

was gibt:

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

Oder:

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

was gibt:

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

Wie Sie sehen, fügt die Funktion rowid_to_column- die neue Spalte vor den anderen hinzu, während die Kombination mutate & row_number()- die neue Spalte nach den anderen hinzufügt.


Und noch eine Basis-R-Alternative:

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

daten.Tabelle Lösung

Einfachere Syntax und viel schneller

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
4
altabq

Hoffe das wird helfen. Die kürzeste und beste Methode zum Erstellen einer ID-Spalte ist:

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

Viele präsentierten ihre Ideen, aber ich denke, dies ist der kürzeste und einfachste Code für diese Aufgabe:

data$ID <- 1:nrow(data)

Eine Linie. Der einzig wahre.

0
Eric Lino