Gegeben ein Datenframe und eine Zeichenkette, die die Operation für die Spalten enthält:
%Vor%Aufruf von 'transmute_ ()' gibt mir die gewünschte Ausgabe:
%Vor%Ausgabe:
%Vor%Großartig bis jetzt! Aber wenn ich sofort die gleiche 'transmute_ ()' Funktion wiederhole, bekomme ich einen Fehler.
%Vor%Das Ändern der Spaltennamen der Eingabestring gibt immer noch den gleichen Fehler und das Speichern der gleichen Zeichenfolge in einer anderen Variable tut dies auch. Wenn ich jedoch den neuen Spaltennamen ändere, funktioniert er wieder zum ersten Mal, gefolgt von einem Fehler (siehe Beispiele für jeden unten).
Ich bin mir nicht sicher, warum das so ist. Es scheint, als wäre eine temporäre Version der Ausgabe irgendwo gespeichert und der Fehler ist eine Reaktion darauf, aber ich habe noch nie so etwas erlebt. Jede Hilfe, die es versteht und umgeht (abgesehen von der offensichtlichen Umbenennung der neuen Spalte), wäre sehr zu begrüßen.
Danke!
%Vor% mutate_
hat das gleiche Problem, aber wenn man sich den Code anschaut, weil transumute_ einen Aufruf von mutate_ aufruft. Es ist nicht so sehr ein Fehler in dplyr, aber auf der Seite dplyr github gibt es ein Problem. Siehe github-Problem 315 .
Nachdem Sie transmute_(myDF,myString)
ausgeführt haben, können Sie sehen, dass Added
in der Basisumgebung verfügbar ist. Geben Sie es ein (oder base::Added
) und Sie sehen das Objekt und die Werte, die erstellt wurden. Dies führt zu einem Problem, wenn Sie Ihre Codezeile erneut aufrufen.
Für weitere Details lesen Sie die Kommentare zur github-Ausgabe 315 von Romain Francois und Hadley Wickham
Danke für deine Antwort @phiver! Ich poste dies als eine alternative Antwort für jetzt und werde die Frage offen für etwas länger offen lassen, um zu sehen, ob jemand eine bessere Lösung zu diesem hat ...
Es scheint wirklich so, als wäre das eine Sackgasse. Eine andere Möglichkeit zu sehen, dass Added
in der Basis sitzt, ist das Paket 'pryr':
Leider scheint die Basis nicht bearbeitet zu werden:
%Vor% An diesem Punkt finde ich es zu kompliziert, weiter darauf einzugehen. Mein oberstes Ziel war es, eine Operation für eine bestimmte Anzahl von Fällen durchzuführen, wobei sich die Spaltennamen von Fall zu Fall ändern können. Die Verwendung von Strings (und damit die Funktion transmute_()
) schien am sinnvollsten zu sein. Aber hier ist ein alternativer Ansatz (Idee von wie kann ich select () in dplyr sagen, dass die gesuchte Zeichenfolge ein Spaltenname in einem Datenrahmen ist ):
Nicht sehr nett, aber es macht den Job. Wenn jemand eine sauberere Workaround hat, bitte teilen Sie es mit!