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
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
Versuchen:
colnames(merger)[1] <- "Date"
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")
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"
Wenn Sie nur Vektoren an cbind()
übergeben, wird eine Matrix erstellt, kein Datenrahmen. Lesen ?data.frame
.
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] )
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 Für Datenrahmen, die die Matrix nach den Spaltennamen zurückgeben, hindert Sie jedoch nichts daran, den Code von setColNames
Funktion analog zu setNames
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.
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)