我使用tidyverse包中的函数mutate_each,我得到一条消息,这个函数已被弃用。我想使用其他未弃用的函数来更改字段类型。
以下是我目前如何使用mutate_each的可重现的例子。
library(tidyverse)
set.seed(123)
df <- data.frame(FirstName = sample(LETTERS[1:2],size=3, replace=TRUE),
LastName = sample(LETTERS[3:6],size=3, replace=TRUE),
StartDate = c("1/31/2000","2/1/2000","3/1/2000"),
EndDate = c("1/31/2010","2/10/2011","3/1/2016"),
stringsAsFactors = FALSE)
str(df)
df %>% mutate_each(funs(as.factor(as.character(.))),
c(FirstName:LastName)) %>%
mutate_each(funs(as.Date(., format = "%m/%d/%Y",
origin = "1899-12-30")),
c(StartDate:EndDate))
`mutate_each()` is deprecated.
Use `mutate_all()`, `mutate_at()` or `mutate_if()` instead.
To map `funs` over a selection of variables, use `mutate_at()`...etc
我玩过mutate_all(),mutate_at()和mutate_if(),但没有运气。
答案 0 :(得分:3)
使用@Chi Pak中的注释,函数mutate_at可用于替换函数mutate_each
library(tidyverse)
set.seed(123)
df <- data.frame(FirstName = sample(LETTERS[1:2],size=3, replace=TRUE),
LastName = sample(LETTERS[3:6],size=3, replace=TRUE),
StartDate = c("1/31/2000","2/1/2000","3/1/2000"),
EndDate = c("1/31/2010","2/10/2011","3/1/2016"),
stringsAsFactors = FALSE)
t1 <- df %>% mutate_each(funs(as.factor(as.character(.))),
c(FirstName:LastName )) %>%
mutate_each(funs(as.Date(., format = "%m/%d/%Y",
origin = "1899-12-30")),
c(StartDate:EndDate))
t2 <- df %>% mutate_at(vars(FirstName:LastName),
funs(as.factor(as.character(.)))) %>%
mutate_at(vars(StartDate:EndDate),
funs(as.Date(as.character(.),
format = "%m/%d/%Y", origin = "1899-12-30")))
identical(t1,t2)
[1] TRUE