Greifen Sie auf data.table-Spalten mit Strings zu

8

Entschuldigung für eine Frage, die es wahrscheinlich offensichtlich macht, dass ich normalerweise in Python / Pandas arbeite, aber ich bleibe dabei. Wie wähle ich eine Spalte data.table mit einer Zeichenfolge aus?

%Vor%

Ich bin sicher, das ist super einfach, aber ich verstehe es nicht. Jede Hilfe wird sehr geschätzt!

-------------- BEARBEITET ZU HINZUFÜGEN ----------------------

Nach ein paar hilfreichen Kommentaren und Tipps, glaube ich, habe ich das Problem etwas eingegrenzt und habe ein reproduzierbares Beispiel. Überlegen Sie:

%Vor%

Und wir nehmen an, dass wir die Werte in col2 zu col1 zuweisen wollen. Wie ich unten erfahren habe, wäre die data.table -Syntax dafür dt[,col1:=col2] , sauber und einfach. Die Probleme beginnen, wenn eine (oder beide) der Variablen im Argument j Strings sind. Ich habe folgendes gefunden:

dt[, "col1":=col2] funktioniert wie erwartet

dt[, "col1":="col2"] schlägt wie erwartet fehl (versucht, dem Doppelvektor col2

das Zeichen col1 zuzuweisen

dt[, "col1":=get("col2")] funktioniert wie erwartet

dt[, get("col1")] gibt col1 wie erwartet zurück

aber: dt[, get("col1"):=col2] oder eine andere Zuweisung schlägt fehl.

Irgendein Kontext: Der Grund dafür ist, dass ich Strings in einer Schleife konstruiere, um auf eine größere Anzahl von Spalten zuzugreifen, die alle den Namen colname_colnumber haben, dh ich fahre über colname und colnumber bis dahin Zugriffspalte paste0(colname,colnumber) .

    
Nils Gudat 31.05.2015, 20:54
quelle

3 Antworten

5

Sie können get() als Argument j verwenden, indem Sie einzelne Klammern verwenden:

%Vor%

Das Ergebnis:

%Vor%

Sie können auch eine Zeichenfolge direkt innerhalb des double-eckigen Operators verwenden:

%Vor%     
Andrie 31.05.2015, 20:57
quelle
5

Ich füge hinzu, dass Sie, wenn Sie eine Reihe von Spalten haben möchten, etwas verwenden möchten wie:

%Vor%

Wie @Arun unten hinzufügt, sind andere Optionen zum Erhalten mehrerer Spalten:

%Vor%

und

%Vor%

Als Referenz scheint mget sehr langsam zu sein; .SDcols ist am schnellsten, aber wettbewerbsfähig mit with = FALSE ; Ich persönlich finde alles in verschiedenen Situationen nützlich / natürlich.

Hier ist ein einfacher Benchmark:

%Vor%     
MichaelChirico 01.06.2015 16:00
quelle
3

Sie können Zuweisungen ohne get ausführen, aber mit Klammern:

%Vor%

anstelle von:

%Vor%

Siehe für mehr Erklärung: Auswählen / Zuweisen zu Daten.Tabellenvariablen, deren Namen in einem Zeichenvektor gespeichert sind

    
Evertvdw 03.11.2016 08:57
quelle

Tags und Links