2017-09-01 1 views
2

Ich habe diesen Code, die neuen Spalten in meinem R-Datenrahmen erzeugt:Bedeutung der eckigen Klammern, wenn kein Komma Zeile oder Spalte bestimmen

for (i in 2:7){ 
    v <- apply(x[,c(i,i+14,i+28, i+42)],1,sum,na.rm=T) 
    x[paste("income", i-1)] <- v 
} 

Warum gibt es keine Notwendigkeit für ein Komma vor dem Beginn die Einfügefunktion? Mein Verständnis ist, dass, um eine Spalte zu indizieren, wenn sie mit eckigen Klammern indizieren, dann ist es nach einem Komma, wie so erscheinen:

x[,paste("income", i-1)] 
+3

Es ist eine Listenuntergruppe, da Datenrahmen Spaltenlisten sind. – Frank

+0

Können Sie einige Beispieldaten bereitstellen? Mein erster Gedanke ist, dass Ihre Anwendung einen Vektor erstellt, so dass Sie keine zusätzlichen Spalten haben und x [einfügen ("Einkommen", i-1)] verwenden können. – user108363

+2

Siehe '?" ["' Für eine ausführliche Diskussion. – lmo

Antwort

1

Alle data.frames sind ebenfalls aufgeführt, wobei jede Spalte ein Element der Liste zu sein. In ?[.data.frame, heißt es

Wenn [ und [[ mit einem einzigen Vektorindex verwendet werden (x[i] oder x[[i]]), sie Index der Datenrahmen, als ob es sich um eine Liste waren.

So folgt x[1] Liste Indizierung: es gibt nur das erste Element (Spalte) als data.frame. Sie können auch mehrere Spalten auf diese Weise angeben: x[1:3] gibt ein data.frame der ersten drei Spalten von x zurück.

+0

Danke, das macht Sinn! –

2

In R gibt es zwei Arten von subsetting. Für weitere Informationen lesen Sie Subsetting: Simplifying vs preserving in Advanced R von Hadley Wickham. Alternativ können Sie ?"[" eingeben. Die vereinfachende Teilmenge vereinfacht den Datentyp, während die erhaltende Teilmenge den Datentyp beibehält.

  • Wenn Sie einfach Subsetting mit einem Datenrahmen tun, erhalten Sie möglicherweise eine eindimensionale Datenstruktur, z. ein Vektor. x[, 1] oder x[[1]] oder dplyr::select(x,1)
  • Wenn Sie Subsetting mit einem Datenrahmen beibehalten, bleibt der Datenrahmen ein Datenrahmen. x[, 1, drop = F] oder x[1]

Lassen Sie uns ein kurzes Beispiel machen:

mtcars[2] %>% head(5) 

gibt Ihnen

    cyl 
Mazda RX4    6 
Mazda RX4 Wag   6 
Datsun 710   4 
Hornet 4 Drive  6 
Hornet Sportabout  8 

Während

mtcars[,2] %>% head(5) 

gibt Ihnen

6 6 4 6 8 

mtcars[2] %>% typeof() 

Sie

"list" 

Während

mtcars[,2] %>% typeof() 

gibt Ihnen

gibt

gibt Ihnen

"data.frame" 

während

mtcars[,2] %>% class() 

gibt Ihnen

"numeric" 
Verwandte Themen