Od dołu (przynajmniej ?mutate_each
w dplyr 0,5) wygląda na to, że ta funkcja, jak w odpowiedzi @docendo discimus, zostanie uznana za przestarzałą i zastąpiona bardziej elastycznymi alternatywami: mutate_if
, mutate_all
i mutate_at
. Ten, który jest najbardziej podobny do tego, co wspomina @hadley w swoim komentarzu, prawdopodobnie używa numeru mutate_at
. Zauważ, że kolejność argumentów jest odwrotna, w porównaniu do mutate_each
, a vars()
używa select()
jak semantyki, co interpretuję jako funkcje ?select_helpers
.
dat %>% mutate_at(vars(starts_with("fac")),funs(factor)) %>%
mutate_at(vars(starts_with("dbl")),funs(as.numeric))
Ale mutate_at
mogą numery kolumn zamiast do vars()
argumentu, a po przeczytaniu tej stronie i patrząc na alternatyw, skończyło się za pomocą mutate_at
ale z grep
uchwycić wiele różnych rodzajów nazw kolumn naraz (chyba, że masz zawsze takie oczywiste nazwy kolumn!)
dat %>% mutate_at(grep("^(fac|fctr|fckr)",colnames(.)),funs(factor)) %>%
mutate_at(grep("^(dbl|num|qty)",colnames(.)),funs(as.numeric))
byłem bardzo podekscytowany zastanawianie się mutate_at
+ grep
, bo teraz jedna linia może pracować na z dużą kolumny.
EDYCJA - teraz widzę matches()
wśród select_helpers, który obsługuje regex, więc teraz lubię to.
dat %>% mutate_at(vars(matches("fac|fctr|fckr")),funs(factor)) %>%
mutate_at(vars(matches("dbl|num|qty")),funs(as.numeric))
Inny ogólnie związany komentarz - jeśli posiadasz wszystkie kolumny z odpowiednimi nazwami i spójnymi formatami, jest to potężne. W moim przypadku zmienia to wszystkie moje kolumny YYYYMMDD, które zostały odczytane jako liczby, w datach.
mutate_at(vars(matches("_DT$")),funs(as.Date(as.character(.),format="%Y%m%d")))
W tym przypadku można również użyć 'starts_with()' – hadley
Dzięki za sugestię, @hadley. Tak więc dla pierwszego przypadku, który byłby 'dat%>% mutate_each (funs (factor), starts_with (" fac "))', aby przekonwertować wszystkie kolumny zaczynając od ciągu "fac" do czynnika. –
@docendodiscimus ma rację: – hadley