ich Daten wie folge:R Iterierte über Spalten neue Spalten zu erstellen (mutieren oder Base R verwenden)
#create sample data frame
df <- data.frame(red_alice_type1 = runif(10, 0, 10),
blue_alice_type1 = runif(10, 0, 10),
green_alice_type1 = runif(10, 0, 10),
red_bob_type1 = runif(10, 0, 10),
blue_bob_type1 = runif(10, 0, 10),
green_bob_type1 = runif(10, 0, 10),
red_alice_type2 = runif(10, 0, 10),
blue_alice_type2 = runif(10, 0, 10),
green_alice_type2 = runif(10, 0, 10),
red_bob_type2 = runif(10, 0, 10),
blue_bob_type2 = runif(10, 0, 10),
green_bob_type2 = runif(10, 0, 10))
Ich mag jedes Farbe-Namenspaar multiplizieren, um eine neue Spalte zu erstellen. z.B. blue_alice_type1 * blue_alice_type2 = blue_alice_product
ich versuche, über Spalten zu durchlaufen diese multiplation auszuführen, wie folgt:
#categories
colors <- c('red', 'blue', 'green')
names <- c('alice', 'bob')
#Attempt 1: Mutate
for (i in colors){
for (j in names){
df <- mutate_(df,
paste(i, j, 'product', sep = "_") = paste(i, j, 'type1', sep = "_") *
paste(i, j, 'type2', sep = "_"))
}
}
#Attempt 2: Base R
for (i in colors){
for (j in names){
assign(paste0('df$', paste(i, j, 'product', sep = "_")),
eval(parse(text=paste0('df$', paste(i, j, 'type1', sep = "_")))) *
eval(parse(text=paste0('df$', paste(i, j, 'type2', sep = "_")))))
}
}
Versuch 1 einen Fehler gibt. Versuch 2 läuft, aber erstellt keine neuen Spalten. Irgendeine Hilfe?
Diese helfen kann: https://stackoverflow.com/questions/46832436/dplyr-mutate-formula-based-on-similarities -in-Spaltennamen/46836700 # 46836700. Für mein Beispiel würde ich so meine Funktion verwenden: 'df%>% dynamic_mutate (ausdruck =" {x} _type1 * {x} _type2 ", prefix =" prod ")' – useR