仍然习惯于咕噜咕噜,我认为其中一个问题应该很容易,但我不知道怎么做。我想要做的就是将下面的日期时间转换为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(?????)
答案 0 :(得分: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))
您还可以使用at_depth
,at_depth(1, ...)
的情况等于map
,因此不需要:
mylist %>%
at_depth(1, ~mutate_at(.x, "Date", as.Date))
保持在purrr
范围内的原始方法是使用dmap_at
:
mylist %>%
map(~dmap_at(.x, "Date", as.Date))
但由于我们现在有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)
答案 1 :(得分:5)
您可以将map()
与dplyr包中的mutate()
结合使用(也可以是tidyverse)。 map()
可用于在列表中应用mutate()
每个数据框。 mutate()
可以将as.Date()
应用于Date
列。你会这样写:
map(mylist, mutate, Date = as.Date(Date))
这句话说:
map()
/将mutate()
函数应用于mylist
mutate()
应用于某个对象时,就像编写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))