Povedzme, že chcem pridať 1 ku každej hodnote stĺpca pomocou dplyr
a štandardné hodnotenie.
Môžem urobiť :
library(dplyr)
data <- head(iris)
var <- "Sepal.Length"
mutate(data, !!rlang::sym(var) := !!quo(`+`(!!rlang::sym(var), 1)))
Ale čo keď by som chcel používať +
ako binárny operátor a nie ako funkcia? Nemôžem zistiť, ako napísať +
so symbolom v kúzle. Vo väčšine z mojich pokusov som dostal chybu pri pokuse o použitie nečínového argumentu (napr. Symbol) s binárnym operátorom +
.
S zastaraným mutate_
môžeš použiť lazyeval::interp
čo vám umožnilo jednoducho to urobiť:
mutate_(data, .dots = setNames(list(lazyeval::interp(~var + 1, var = as.symbol(var))), var))
Akákoľvek pomoc by bola ocenená. Vďaka.
odpovede:
3 pre odpoveď č. 1Môžete jednoducho použiť
mutate(data, !!rlang::sym(var) := (!!rlang::sym(var)) + 1)
Všimnite si zátvorky okolo časti bang-bang. Toto je potrebné len preto, že pravdepodobne používate staršiu verziu rlangu. V starších verziách (<0,2) !!
má veľmi nízku prioritu, takže pridanie sa stáva pred rozšírením. Začínajúc rlang 0.2 !!
bola daná iná prednosť operátora a funguje viac, ako by ste mohli očakávať.
Samozrejme, ak používate rovnakú transformáciu na veľa stĺpcov, možno budete chcieť použiť mutate_at
, mutate_all
, alebo mutate_if
verzie, ktoré tiež umožňujú, aby transformácie boli špecifické so syntaxou vzorca.
mutate_if(data, is.numeric, ~.x+1)
mutate_all(data, ~.x+1)
mutate_at(data, var, ~.x+1)