Ich versuche, Werte aus einer Nachschlagetabelle zu verwenden, um entsprechende Werte in einer Haupttabelle zu multiplizieren. Anwenden einer Funktion über mehrere Spalten
Dies ist ein Beispiel einiger Daten
Die aufblicken
lu = structure(list(year = 0:12, val = c(1.6422, 1.6087, 1.5909, 1.4456,
1.4739, 1.4629, 1.467, 1.4619, 1.2588, 1.1233, 1.1664, 1.1527,
1.2337)), .Names = c("year", "val"), class = "data.frame", row.names = c(NA,
-13L))
Hauptdaten
dt = structure(list(year = c(3L, 4L, 6L, 10L, 3L, 9L, 10L, 7L, 7L,
1L), x = 1:10, y = 1:10), .Names = c("year", "x", "y"), row.names = c(NA,
-10L), class = c("data.table", "data.frame"))
kann ich die Ergebnisse, die ich möchte produzieren, durch Zusammenführung und dann eine Spalte in eine Multiplikation Zeit
library(data.table)
dt = merge(dt, lu, by = "year")
dt[, xnew := x*val][, ynew := y*val]
Allerdings habe ich viele Variablen, um dies zu übernehmen. Es gab viele Fragen dazu, aber ich kann es nicht zur Arbeit bekommen.
Mit Ideen von How to apply same function to every specified column in a data.table und R Datatable, apply a function to a subset of columns, versuchte ich
dt[, (c("xnew", "ynew")):=lapply(.SD, function(i) i* val), .SDcols=c("x", "y")]
Fehler bei FUN (X [[i]], ...): Objekt 'val' nicht gefunden
for (j in c("x", "y")) set(dt, j = j, value = val* dat[[j]])
Fehler in set (dt, j = j, Wert = val * dt [[j]]): Objekt 'val' nicht gefunden
Und nur die Multiplikation zu versuchen, ohne Zuweisen (von Data table - apply the same function on several columns to create new data table columns) hat auch nicht funktioniert.
dt[, lapply(.SD, function(i) i* val), .SDcols=c("x", "y")]
Fehler bei FUN (X [[i]], ...): Objekt 'val' nicht gefunden
Bitte könnten Sie meine Fehler hinweisen. Vielen Dank.
Ich benutze data.table version v1.9.6.
Angabe Es funktioniert für mich. Haben Sie auf die neueste Version von 'data.table' aktualisiert? (was 1.10.4 ist) – Jaap
Im bei v1.9.6. Ich kann auf meinem Heim-PC aktualisieren, um Akrun's Antwort zu versuchen, aber ich werde auf Version 1.9.6 bei der Arbeit beschränkt sein. (Dachte nicht, dass Version ein Problem wäre, da die anderen Fragen ein paar Jahre alt waren). Ich füge Details zur Frage hinzu. – user2957945
Es sollte in 1.9.6 auch funktionieren AFAIK – Jaap