Ich möchte nur verstehen, wenn es einen Unterschied zwischen names
und colnames
bei der Arbeit mit data.frame
gibt. Beide scheinen sich genauso zu verhalten. Kann ich eins durch das andere ersetzen?Was ist der Unterschied zwischen Namen und Spaltennamen
Antwort
Sind sie für data.frames identisch? JA
Sind sie im Allgemeinen gleich? Nicht ganz - der große Unterschied ist, dass COLNAMES auch für Matrizen, während Namen arbeitet nicht (nur Datenrahmen).
Zusätzlich Sie können verwenden Namen zu setzen/die Namen von Vektoren erhalten (und, aus offensichtlichen Gründen, Sie können dies nicht mit COLNAMES --die Ergebnis für immer NULL ist und ein Fehler für die Einstellung).
'Namen' funktioniert auch auf Vektoren. Und es funktioniert tatsächlich auf Matrizen ... es tut einfach nicht das, was Sie von ihm erwarten! – nico
Re: "Namen" und Matrizen - das ist eine Art lockere Vorstellung von "arbeiten" ... Dennoch, Punkt genommen. –
nur scherzen, war vor allem darauf hinzuweisen, dass es keinen Fehler wirft, und in einigen Fällen kann es durchrutschen :) – nico
Wenn Sie am Anfang des schauen colnames
und colnames<-
Funktionen Quellcode:
R> colnames
function (x, do.NULL = TRUE, prefix = "col")
{
if (is.data.frame(x) && do.NULL)
return(names(x))
(...)
R> `colnames<-`
function (x, value)
{
if (is.data.frame(x)) {
names(x) <- value
}
(...)
Sie können für Datenrahmen sehen, dass, colnames
rufen Sie die names
Funktion. Also ja, sie sind genau gleichwertig.
Soweit ich betroffen bin, der einzige Unterschied zwischen names()
und colnames()
in Bezug auf einen data.frame
Eingang ist, dass sie Speicher etwas anders zugeordnet. Betrachten wir zum Beispiel unter den Code Chunk:
df <- data.frame(x=1:5, y=6:10, z=11:15)
tracemem(df)
names(df) <- c("A", "B", "C")
colnames(df) <- c('a','b','c')
Wenn Sie diesen Code ausführen, werden Sie sehen, dass das Kopieren von df
tritt nur einmal während des names()
Anruf, während das Kopieren von df
zweimal während des Gesprächs colnames()
auftritt.
Wenn Sie nicht gerne kopieren, verwenden Sie' data.table :: setnames '(das Sie auf data.frames verwenden können). – Frank
names()
Kisten Name Attribute wo wie colnames()
Namen einfach die Spalten.
heißt
eine temporäre Variable erstellen.
> temp <- rbind(cbind(1,2,3,4,5),
+ cbind(6,7,8,9,10))
> temp
[,1] [,2] [,3] [,4] [,5]
[1,] 1 2 3 4 5
[2,] 6 7 8 9 10
Erstellen Sie das Objekt names.temp
.
> names.temp <- temp
Verwenden names()
auf names.temp
> names(names.temp) <- paste(c("First col", "Second col", "Third col",
"Fourth Col", "Fifth col"))
> names.temp
[,1] [,2] [,3] [,4] [,5]
[1,] 1 2 3 4 5
[2,] 6 7 8 9 10
attr(,"names")
[1] "First col" "Second col" "Third col" "Fourth Col" "Fifth col"
NA NA NA
[9] NA NA
Wir sehen hier, können wir nennen tatsächlich das fünfte Namensattribut in names.temp
.
> names(names.temp)[5]
[1] "Fifth col"
Wiederholen Sie mit einem zweiten Objekt, aber dieses Mal schafft das colnames.temp
Objekt.
> colnames.temp <- temp
Verwenden colnames()
auf colnames.temp
> colnames(colnames.temp) <- paste(c("First col", "Second col", "Third col",
"Fourth Col", "Fifth col"))
> colnames.temp
First col Second col Third col Fourth Col Fifth col
[1,] 1 2 3 4 5
[2,] 6 7 8 9 10
Jetzt Attribut name NULL ist.
> names(colnames.temp)[5]
NULL
ENDLICH. Schauen wir uns unseren vertrauenswürdigen str()
Befehl an. Wir können sehen, dass es einen Strukturunterschied zwischen names.temp
und colnames.temp
gibt. Insbesondere colnames.temp
hat dimnames
Attribute nicht names
Attribute.
> str(names.temp)
num [1:2, 1:5] 1 6 2 7 3 8 4 9 5 10
- attr(*, "names")= chr [1:10] "First col" "Second col" "Thrid col" "Fourth
Col" ...
> str(colnames.temp)
num [1:2, 1:5] 1 6 2 7 3 8 4 9 5 10
- attr(*, "dimnames")=List of 2
..$ : NULL
..$ : chr [1:5] "First col" "Second col" "Thrid col" "Fourth Col" ...
Schöne erste Antwort, aber 'names()' erstellt keine Namen. 'Namen <-' tut. Es ist eine andere Funktion. – Frank
Ich stehe korrigiert. Die Implikation (Leseannahme) war, Namen() aufzurufen, impliziert den Wunsch zu benennen, was eine schlechte Logik ist. Danke Frank. –
- 1. Was ist der Unterschied zwischen `==` und `ist`?
- 2. Was ist der Unterschied zwischen:.! und: r !?
- 3. Was ist der Unterschied zwischen Difftime und '-'?
- 4. Was ist der Unterschied zwischen $ und $$?
- 5. Was ist der Unterschied zwischen Verilog! und ~?
- 6. was ist der Unterschied zwischen [[], []] und [[]] * 2
- 7. Was ist der Unterschied zwischen/* ... */und/** ... */
- 8. Was ist der Unterschied zwischen `&` und `ref`?
- 9. Was ist der Unterschied zwischen $ (...) und `...`
- 10. Was ist der Unterschied zwischen .Equals und ==
- 11. Was ist der Unterschied zwischen "$^N" und "$ +"?
- 12. Was ist der Unterschied zwischen + = und = +?
- 13. Was ist der Unterschied zwischen? und ? = Nil
- 14. Was ist der Unterschied zwischen $ (()) und Ausdruck?
- 15. Was ist der Unterschied zwischen:
- 16. Was ist der Unterschied zwischen Firefox-Erweiterung und Plugin?
- 17. Was ist der Unterschied zwischen Schema und Datenwörterbuch?
- 18. Was ist der Unterschied zwischen dem Standard- und dem Standardkonstruktor?
- 19. Was ist der Unterschied zwischen Titel und Anzeigename
- 20. Was ist der Unterschied zwischen concurrent.futures und asyncio.futures?
- 21. Was ist der Unterschied zwischen @Named und @Qualifier im Frühjahr
- 22. SBT - Was ist der Unterschied zwischen Name und ID?
- 23. reactive-native Was ist der Unterschied zwischen MainActivity.java und MyApp.java
- 24. Was ist der Unterschied zwischen UIImage (benannt :) und UIImage (imageLiteralResourceName :)?
- 25. Was ist der Unterschied zwischen StackExchange.Redis und StackExchange.Redis.StrongName?
- 26. Was ist der Unterschied zwischen der JSP und der JSTL?
- 27. Was ist der Unterschied zwischen IPV6_ADD_MEMBERSHIP und IPV6_JOIN_GROUP?
- 28. Was ist der Unterschied zwischen einem Controller und einem Service?
- 29. Was ist der Unterschied zwischen HostFactory.Run und HostFactory.New
- 30. Was ist der Unterschied zwischen FUTEX_WAIT und FUTEX_WAIT_PRIVATE?
Von 'colnames': " Für einen Datenrahmen, 'rownames' und' colnames' schließlich nennen 'row.names' und' names' jeweils aber letztere bevorzugt werden" – Henrik