R: Auswahl der Spalten in den Daten.Tabelle

Ich versuche in den Griff zu bekommen mit der Dokumentation der Daten.Tabelle, aber ich möchte um feedback bitten, wo ich falsch in meiner Argumentation bezüglich der folgenden.

(1) ich möchte einen Bereich markieren der Spalten von Daten.Tabelle zum erstellen einer neuen Daten.Tabelle.

(2) Auch, ich möchte nur den ersten Wert jeder Gruppe. Mit Bezug auf die erste Frage, die ich denke, die Antwort ist gegeben hier ,aber dann mit Bezug auf Spalte zahlen. Aber ich möchte in der Spalte Namen, die ich denke, ist eine der stärken (und Verkaufsargumente) der Daten.Tabelle.

Hier ist ein Beispiel-dataset.

DT <- data.table(ID=c(101,101,101,102,103,104,104),
                 "year.1" = c(1,5,3,2,3,4,8), 
                 "year.2" = c(4,5,6,NA,1,2,3), 
                 "year.3" = c(1,2,3,7,9,8,0), 
                 "year.4" = c(4,5,NA,1,2,6,9))
setkey(DT,ID)

In Wirklichkeit habe ich viel mehr Spalten und nicht nur für "Jahr".

# ALL OF THESE DONT WORK AND END IN ERRORS
# To extract a range of columns I have tried this:
dt.sub <- DT[,list(year.1:year.3,ID)]
dt.sub <- DT[,c("year.1":"year.3",ID), with=FALSE] # I know shouldn't work since 
# "with=FALSE" is only intended in combination with := according to the documentation
dt.sub <- DT[,lapply(SD),.SDcols= for (i in 1:3) paste0("year.",i) ]

Für die zweite Frage: wenn ich wollte, dt.sub enthalten nur die erste Beobachtung jeder Gruppe, würde ich erwarten, dass ich verwenden könnte, die "mult" - argument. Aber funktioniert das auch in einem
anders als ich erwarte. Mit dem Beispiel nur eine Spalte:

dt.sub1 <- DT[,year.1, by=ID,mult="first",]

Diese liefert keinen Fehler, aber auch nicht nur geben Sie die erste Zeile der Gruppe. Ich weiß, dass ein workaround wie:

dt.sub1 <- unique(DT[,year.1, by=ID])

nicht die erwartete Leistung, aber ich habe das Gefühl, etwas zu verpassen wichtig, mit der mult option.

  • Hallo Arun, vielen Dank für Ihre Bearbeitung, das macht es klarer!
  • Da v1.9.5 sollte dies funktionieren: dt.sub <- DT[,c("year.1":"year.3",ID), with=FALSE]. Siehe hier.
InformationsquelleAutor Richard | 2013-07-18
Schreibe einen Kommentar