我有一个17个数据框的列表和一个17个日期的列表。它们是有序的并且彼此对应。换句话说,list_of_dfs[[1]]
对应于dates[[1]]
等等。下面的日期列表是使用的日期对象lubridate::ymd
。
> dates
[1] "2004-10-10" "2005-10-10" "2006-10-10" "2007-10-10" "2008-10-10" "2009-10-10" "2010-10-10" "2011-10-10" "2012-10-10" "2013-10-10" "2014-10-10" "2015-10-10" "2016-10-10" "2017-10-10"
[15] "2018-10-10" "2019-10-10" "2020-10-10"
我想对每个数据帧中的变量子集进行突变,以便从中的对应对象中减去该子集dates
。例如,我可以对第一项进行以下操作。
list_of_dfs[[1]] <- list_of_dfs[[1]] %>% `
mutate_at(.vars = vars(contains('string')),
.funs = funs(dates[[1]] - .)
有没有一种方法可以将以上内容合并到一个map
或lapply
类似的命令中,让我进行迭代dates
?
我的壁橱大概是
list_of_dfs <- list_of_dfs %>%
map(., function(x) mutate_at(x,
.vars = vars(contains('string')),
.funs = funs(dates - .)))
.funs
如上所示,它不能接受列表对象。
我们可以map2
在进行“日期”对应元素的减法时使用list
library(dplyr)
library(purrr)
list_of_dfs2 <- map2(list_of_dfs, dates, ~ {date <- .y
.x %>%
mutate_at(vars(contains('string')), ~ date - as.Date(.))})
在的开发版本中dplyr
,across
可以与mutate
list_of_dfs2 <- map2(list_of_dfs, dates, ~ { date <- .y
.x %>%
mutate(across(contains('string'), ~ date - as.Date(.x)))
})
list_of_dfs <- list(data.frame(string1 = Sys.Date() - 1:6, string2 = Sys.Date()),
data.frame(string1 = Sys.Date() - 1:6, string2 = Sys.Date()))
dates <- Sys.Date() + 1:2
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句