Ich versuche, eine Funktion zu schreiben, die eine vom Benutzer übergebene Variable aus dem resultierenden Datenrahmen ausschließen muss. Ich nutze diese Gelegenheit auch, um etwas mehr über die neue dplyr-Syntax zu erfahren.Verwenden Sie Negation mit Auswählen in dplyr 0.7.x
Die Funktion verhält sich wie eine Kreuzverbindung für Datenrahmen. Ich möchte es als eine saubere Art der Duplizierung von Daten über Parameter einer Funktion verwenden.
Die Funktion arbeitet wie folgt:
crossjoin_df <- function(df1, df2, temp_col = ".k") {
df1 <- df1 %>%
mutate(!!temp_col := 1)
df2 <- df2 %>%
mutate(!!temp_col := 1)
out <- left_join(df1, df2, by = temp_col)
# I'm trying to replace the next line
out[,!names(out)==temp_col]
}
params <- data.frame(k = c(11,10),
n = c(27,26))
data <- data.frame(a = 1:3,
b = 4:6)
crossjoin_df(params, data) # 6 row data set
ich sehen will, ob es möglich ist, die letzte Anweisung mit einer verrohrt select-Anweisung zu ersetzen. Die Negation scheint jedoch nicht zu funktionieren.
Ich kann so etwas wie bekommen:
out %>% select(!!temp_col)
zu arbeiten, aber das offenbar wählt nur .k
. Ich kann nichts erhalten wie:
out %>% select(-!!temp_col)
zu arbeiten.
Seit 'temp_var' ein strin ist g, müssen Sie 'rlang :: sym' verwenden, um es in eine Ausnahmebedingung umzuwandeln, wenn Sie mit' !! ', z. 'out%>% select (- !! rlang :: sym (temp_col)) ' – alistaire
Danke, mein Verständnis ist, dass ich' temp_var' nicht blank haben kann, weil ich es auf der LHS einer 'muate' Anweisung brauche . Ich bin mir nicht sicher, ob es einen saubereren Weg gibt. Ich hatte gehofft, nur bei dplyr bleiben zu können. – vitallish