webentwicklung-frage-antwort-db.com.de

Benennen Sie den Spaltennamen nach dem Binden der Daten um

enter image description here

merger <- cbind(as.character(Date),weather1$High,weather1$Low,weather1$Avg..High,weather1$Avg.Low,sale$Scanned.Movement[a])

Nach cbind den Daten hat das neue DF automatisch Spaltennamen V1, V2...... Ich möchte die Spalte umbenennen nach

colnames(merger)[,1] <- "Date"

aber scheiterte. Und wenn ich merger$V1,

Error in merger$V1 : $ operator is invalid for atomic vectors
30
janicebaratheon

Sie können Spalten auch direkt im cbind -Aufruf benennen, z.

cbind(date=c(0,1), high=c(2,3))

Ausgabe:

     date high
[1,]    0    2
[2,]    1    3
58
daknowles

Versuchen:

colnames(merger)[1] <- "Date"

Beispiel

Hier ist ein einfaches Beispiel:

a <- 1:10
b <- cbind(a, a, a)
colnames(b)

# change the first one
colnames(b)[1] <- "abc"

# change all colnames
colnames(b) <- c("aa", "bb", "cc")
12
johannes

sie haben in Ihrer Frage folgendes Beispiel angegeben:

colnames(merger)[,1]<-"Date"

das Problem ist das Komma: colnames () gibt einen Vektor zurück, keine Matrix. Die Lösung lautet also:

colnames(merger)[1]<-"Date"
6
Marcel Hebing

Wenn Sie nur Vektoren an cbind() übergeben, wird eine Matrix erstellt, kein Datenrahmen. Lesen ?data.frame.

3
Roland

Wenn Sie cbind eine Reihe von Argumenten anbieten, die alle Vektoren sind, erhalten Sie keinen Datenrahmen, sondern eine Matrix, in diesem Fall eine Matrix mit allen Zeichen. Sie haben unterschiedliche Eigenschaften. Sie können einen Datenrahmen erhalten, wenn einige Ihrer Argumente Datenrahmen bleiben. Versuchen Sie Folgendes:

merger <- cbind(Date =as.character(Date),
             weather1[ , c("High", "Low", "Avg..High", "Avg.Low")] , 
             ScnMov =sale$Scanned.Movement[a] )
2
42-

Ein Weg zur Herstellung eines data.frame und in der Lage zu sein, dies in einer Zeile zu tun, bedeutet, alle Matrizen/Datenrahmen, die an cbind übergeben wurden, in einen data.frame zu zwingen, während das Spaltennamenattribut mit setNames gesetzt wird:

a = matrix(rnorm(10), ncol = 2)
b = matrix(runif(10), ncol = 2)

cbind(setNames(data.frame(a), c('n1', 'n2')), 
      setNames(data.frame(b), c('u1', 'u2')))

welche produziert:

          n1        n2         u1        u2
1 -0.2731750 0.5030773 0.01538194 0.3775269
2  0.5177542 0.6550924 0.04871646 0.4683186
3 -1.1419802 1.0896945 0.57212043 0.9317578
4  0.6965895 1.6973815 0.36124709 0.2882133
5  0.9062591 1.0625280 0.28034347 0.7517128

Leider gibt es keine setColNames Funktion analog zu setNames Für Datenrahmen, die die Matrix nach den Spaltennamen zurückgeben, hindert Sie jedoch nichts daran, den Code von setNames so anzupassen, dass einer entsteht:

setColNames <- function (object = nm, nm) {
    colnames(object) <- nm
    object
}

Siehe diese Antwort , das Paket magrittr enthält Funktionen dafür.

2
Alex

Fügen Sie einfach den Namen hinzu, den Sie in Anführungszeichen verwenden möchten, bevor Sie einen Vektor hinzufügen

a_matrix <- cbind(b_matrix,'Name-Change'= c_vector)
0
Priyansh