仍然习惯于purrr,我有一个我认为应该很容易的问题,但我不知道该怎么做.我想要做的就是将下面的日期时间转换为as.Date()的日期.这是一个数据帧列表.一直在玩,但还没有找到有用的东西...任何帮助赞赏.
df <- data.frame(Date = seq.POSIXt(Sys.time(), Sys.time() + hours(24), by = "hour"),
useless = "ignore me")
df2 <- data.frame(Date = seq.POSIXt(Sys.time(), Sys.time() + hours(1), by = "min"),
useless = "ignore me")
mylist <- list(df,df2)
mylist %<>% map(?????)
Run Code Online (Sandbox Code Playgroud)
Tho*_*s K 10
实现目标的规范方法是结合map一些动词dplyr,例如mutate_at.目前purrr仍然具有该功能dmap_at,但purrr将来会被删除.
因此,您将map覆盖列表,然后使用以下命令修改日期列mutate_at:
library(purrr)
library(lubridate)
library(dplyr)
mylist %>%
map(~mutate_at(.x, "Date", as.Date))
Run Code Online (Sandbox Code Playgroud)
你也可以使用at_depth,这在的情况下,at_depth(1, ...)等于map,因此没有必要的:
mylist %>%
at_depth(1, ~mutate_at(.x, "Date", as.Date))
Run Code Online (Sandbox Code Playgroud)
最初的方法purrr是使用dmap_at:
mylist %>%
map(~dmap_at(.x, "Date", as.Date))
Run Code Online (Sandbox Code Playgroud)
但是,因为我们现在有mutate_at和mutate_all朋友,建议,而不是使用它们dmap,dmap_at等等.
df <- data.frame(Date = seq.POSIXt(Sys.time(), Sys.time() + hours(24), by = "hour"),
useless = "ignore me")
df2 <- data.frame(Date = seq.POSIXt(Sys.time(), Sys.time() + hours(1), by = "min"),
useless = "ignore me")
mylist <- list(df,df2)
Run Code Online (Sandbox Code Playgroud)
您可以map()与mutate()dplyr包(也是tidyverse)结合使用.map()可用于mutate()在列表中应用每个数据框.mutate()可以申请as.Date()到Date专栏.你这样写:
map(mylist, mutate, Date = as.Date(Date))
Run Code Online (Sandbox Code Playgroud)
这条线说:
map()/将mutate()函数应用于每个对象mylistmutate()都应用于一个对象,就像你在写作一样mutate(object, Date = as.Date(Date))完整代码:
library(lubridate)
library(purrr)
library(dplyr)
df <- data.frame(Date = seq.POSIXt(Sys.time(), Sys.time() + hours(24), by = "hour"),
useless = "ignore me")
df2 <- data.frame(Date = seq.POSIXt(Sys.time(), Sys.time() + hours(1), by = "min"),
useless = "ignore me")
mylist <- list(df,df2)
mylist <- map(mylist, mutate, Date = as.Date(Date))
Run Code Online (Sandbox Code Playgroud)