Ich bin auf der Suche nach einer Spalte zu einer data.table
, die eine Verkettung von mehreren anderen Spalten ist, deren Namen ich in einem Vektor cols
gespeichert habe. Per https://stackoverflow.com/a/21682545/1840471 versuchte ich do.call
+ paste
aber konnte es nicht funktionieren. Hier ist, was ich versucht habe:Verknüpfen eines Vektors von Spaltennamen in R data.table
# Using mtcars as example, e.g. first record should be "110 21 6"
dt <- data.table(mtcars)
cols <- c("hp", "mpg", "cyl")
# Works old-fashioned way
dt[, slice.verify := paste(hp, mpg, cyl)]
# Raw do.call+paste fails with message:
# Error in do.call(paste, cols): second argument must be a list
dt[, slice := do.call(paste, cols)]
# Making cols a list makes the column "hpmpgcyl" for each row
dt[, slice := do.call(paste, as.list(cols))]
# Applying get fails with message:
# Error in (function (x) : unused arguments ("mpg", "cyl")
dt[, slice := do.call(function(x) paste(get(x)), as.list(cols))]
Hilfe geschätzt - danke.
ähnliche Fragen:
Concatenate columns and add them to beginning of Data Frame (arbeitet auf
data.frames
mitcbind
unddo.call
- das war sehr langsam auf meinemdata.table
)R - concatenate row-wise across specific columns of dataframe (befaßt sich nicht mit Spalt als Namen oder große Anzahl von Säulen)
Accessing columns in data.table using a character vector of column names (hält Aggregation Spaltennamen)
Danke, ich habe 'mget' vorher noch nicht gesehen und sehe es nicht in den Referenzen. Wie funktioniert das anders als "bekommen"? –
@MaxGhenis @MaxGhenis Es ist ähnlich zu verwenden "Get" in einer Schleife (für Vektoren, die Länge> 1) haben 'dt [, Scheibe: = do.call (einfügen, lapply (cols, Funktion (x) get (x))]]] ' – akrun
' .SDcols' ist der idiomatische Weg - nur um es klar zu machen. 'mget' /' get' konnte in verschiedenen Situationen langsam werden. –