Ich habe einen großen Datensatz in einem langen Datenrahmen gespeichert. Ich möchte Daten über einige Variablen extrahieren und eine Formel verwenden, um neue Daten zu generieren. Alle notwendigen Informationen sollten aus der Formel extrahiert werden. Zuerst möchte ich die Informationen in der Formel verwenden, um das Dataset für die entsprechenden Variablen zu filtern - dazu verwende ich die Funktion all.vars()
. Ich verlasse mich auch auf das formula.tools
Paket, das auf CRAN ist. Es dient zur einfachen Extraktion der linken und rechten Seite der Gleichung (lhs
bzw. rhs
).Lassen Sie dplyr mutieren Formel verwenden
library(dplyr)
library(reshape2)
library(formula.tools)
set.seed(100)
the_data <- data.frame(country = c(rep("USA", 9), rep("DEU", 9), rep("CHN", 9)),
year = c(2000, 2010, 2020),
variable = c(rep("GDP", 3), rep("Population", 3), rep("Consumption", 3)),
value = rnorm(27, 100, 100))
add_variable <- function(df, equation){
df <- filter(df, variable %in% all.vars(equation))
df <- dcast(df, country + year ~ variable)
df <- mutate_(df, rhs(equation))
# code to keep only the newly generated column
# ...
df <- melt(df, id.vars = c("country", "year"))
}
result <- add_variable(the_data, GDPpC ~ GDP/Population)
Die neu generierte Spalte sollte GDPpC
genannt werden, zur Zeit es GDP/Population
genannt wird. Wie kann das verbessert werden? In einem letzten Schritt möchte ich auch die Daten so filtern, dass nur die neu erzeugten Daten im Ergebnis enthalten sind, die dann über rbind
an den Quelldatenrahmen angehängt werden können.
Schwer zu sagen, was Ihre Frage ist –
Danke, Sie haben Recht. Ich habe versucht, das zu verbessern. – roming