Sie Vorteil von rename_
nehmen und es Namen übergeben, die Sie leicht konstruieren können. Hier stelle ich die Namen so ein, dass sie den hartcodierten Namen unter Verwendung von setNames
entsprechen, und benenne sie dann einfach um.
updatedFF <- function(df, col){
colNames <-
setNames(
paste0("c", 1:3)
, paste0(col, 1:3))
df %>%
mutate_at(col, funs(c1 = .*2, c2 = .*3, c3 = .*4)) %>%
rename_(.dots = colNames)
}
df %>% updatedFF("x")
gibt
# A tibble: 5 × 5
x y x1 x2 x3
<int> <int> <dbl> <dbl> <dbl>
1 1 101 2 3 4
2 2 102 4 6 8
3 3 103 6 9 12
4 4 104 8 12 16
5 5 105 10 15 20
Hinweis, dass dies fehlschlagen, wenn Sie in mehr als einem Spaltennamen übergeben. Wenn Sie nämlich einen einzelnen Spaltennamen übergeben, wird den benannten Funktionen bereits der Spaltenname vorangestellt. Sie können dies in Ihrer ursprünglichen ff
Funktion sehen, wenn Sie beide „x“ übergeben und „y“:
df %>% ff(c("x", "y"))
gibt
# A tibble: 5 × 8
x y x_c1 y_c1 x_c2 y_c2 x_c3 y_c3
<int> <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 1 101 2 202 3 303 4 404
2 2 102 4 204 6 306 8 408
3 3 103 6 206 9 309 12 412
4 4 104 8 208 12 312 16 416
5 5 105 10 210 15 315 20 420
Diese Diskrepanz kann gelegentlich zu Problemen führen, so dass Sie sicherstellen wollen, dass Es wird konsistent gehandhabt, indem die Namen so festgelegt werden, dass der Spaltenname enthalten ist, auch wenn nur eine Spalte verwendet wird. Hier setzt er nur Namen, wenn nur eine Spalte übergeben wird und es setzt sie das Format anzupassen, das auftritt, wenn mehrere Spalten übergeben werden.
moreComplexFF <- function(df, col){
if(length(col) == 1){
colNames <-
setNames(
paste0("c", 1:3)
, paste0(col, "_c", 1:3))
} else{
colNames = NULL
}
df %>%
mutate_at(col, funs(c1 = .*2, c2 = .*3, c3 = .*4)) %>%
rename_(.dots = colNames)
}
Mit einer Spalte, es funktioniert ähnlich wie vor (wenn auch mit dem " _c“enthalten):
df %>% moreComplexFF(c("x"))
x y x_c1 x_c2 x_c3
<int> <int> <dbl> <dbl> <dbl>
1 1 101 2 3 4
2 2 102 4 6 8
3 3 103 6 9 12
4 4 104 8 12 16
5 5 105 10 15 20
Mit zwei Spalten gibt, lässt er die allein Namen (so dass es nicht einen Fehler melden):
df %>% moreComplexFF(c("x", "y"))
gibt
x y x_c1 y_c1 x_c2 y_c2 x_c3 y_c3
<int> <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 1 101 2 202 3 303 4 404
2 2 102 4 204 6 306 8 408
3 3 103 6 206 9 309 12 412
4 4 104 8 208 12 312 16 416
5 5 105 10 210 15 315 20 420
Nicht dplyr Lösung einfach 'df sein könnte [paste0 ("x", 1: 3)] <- df $ x * rep (2: 4, die jeweils = Länge (df $ x)) '(das könnte leicht in eine Funktion verpackt werden) –