Antworten:
Für Versionen von data.table funktionieren >= 1.9.8
die folgenden Funktionen:
library(data.table)
dt <- data.table(a = 1, b = 2, c = 3)
# select single column by index
dt[, 2]
# b
# 1: 2
# select multiple columns by index
dt[, 2:3]
# b c
# 1: 2 3
# select single column by name
dt[, "a"]
# a
# 1: 1
# select multiple columns by name
dt[, c("a", "b")]
# a b
# 1: 1 2
Informationen zu Versionen von data.table< 1.9.8
(für die die Auswahl numerischer Spalten erforderlich war with = FALSE
) finden Sie in dieser vorherigen Version dieser Antwort. Siehe auch NEWS in Version 1.9.8, POTENZIELL BREAKING CHANGES, Punkt 3.
DT[,list(b:c)
, da ich es bequem fand, die Spalten direkt in der Datentabelle zu transformieren, zB kann ich das DT[,list(1/b,2*c)]
, aber das funktioniert nicht mit.
with=FALSE
in diesem Fall unnötig: github.com/Rdatatable/data.table/issues/…
data.frame
kompatible Verwendung with=FALSE
. Wie jedoch von ca. 3 Wochen, die Entwicklungsversion von data.table wurde , um Anrufe wie geändert dt[, 2]
, dt[, 2:3]
, dt[, "b"]
, und dt[, c("b", "c")]
verhalten sich genauso , wie sie in der mit tun data.frame
s ohne explizit festgelegt zu haben with=FALSE
. Es ist großartig! Hier finden Sie das jeweilige Commit, einschließlich des NEWS-Eintrags, der die Änderung beschreibt.
Es ist ein bisschen ausführlich, aber ich habe mich daran gewöhnt, die versteckte .SD
Variable zu verwenden.
b<-data.table(a=1,b=2,c=3,d=4)
b[,.SD,.SDcols=c(1:2)]
Es ist ein bisschen mühsam, aber Sie verlieren nicht an anderen Funktionen von data.table (glaube ich nicht), sodass Sie weiterhin andere wichtige Funktionen wie Join-Tabellen usw. verwenden können sollten.
Ab Version 1.10.2 können Sie auch verwenden ..
dt <- data.table(a=1:2, b=2:3, c=3:4)
keep_cols = c("a", "c")
dt[, ..keep_cols]
dt[, !..keep_cols]
und dt[, -..keep_cols]
funktioniert wie erwartet!
@ Tom, vielen Dank, dass Sie auf diese Lösung hingewiesen haben. Es funktioniert großartig für mich.
Ich suchte nach einer Möglichkeit, nur eine Spalte vom Druck und vom obigen Beispiel auszuschließen. Um die zweite Spalte auszuschließen, können Sie so etwas tun
library(data.table)
dt <- data.table(a=1:2, b=2:3, c=3:4)
dt[,.SD,.SDcols=-2]
dt[,.SD,.SDcols=c(1,3)]
dt[,"a"]
unddt[,"a", with=FALSE]
sehen Sie, was für eine hilfreiche Option es wirklich ist.