我正在一个涉及许多不同小标题的项目中,所有小标题都具有period
YYYYMM格式的变量。以下是我所有小标题的示例:
tibble_1 <- tibble::tibble(
period = c(201901, 201912, 201902, 201903),
var_1 = rnorm(4),
var_2 = rnorm(4)
)
但是对于某些操作(即时间序列图),使用实际的Date变量更容易。所以我正在使用mutate将period变量转换为如下所示的日期:
tibble_1 %>%
dplyr::mutate(
date = lubridate::ymd(stringr::str_c(period, "01"))
)
因为我会做很多事情,并且日期转换不是调用mutate时要做的唯一突变,所以我希望有一个用户定义的函数,可以从mutate调用中调用。这是我的功能:
period_to_date <- function() {
lubridate::ymd(stringr::str_c(period, "01"))
}
我以后会这样称呼它:
tibble_1 %>%
dplyr::mutate(
date = period_to_date()
)
问题是,R无法找到周期对象(它实际上不是对象本身,而是小标题的一部分)。
stri_c中的错误(...,sep = sep,崩溃=崩溃,ignore_null = TRUE):找不到对象'period'
我很确定我需要定义一个数据掩码,以便在其中执行period_to_date的环境可以在其父环境中查找对象(该环境应始终是调用方环境,因为包含period变量的小标题并不总是相同),但我似乎无法弄清楚该怎么做。
该函数不知道您要修改哪个对象。period
在函数中传递对象,并按如下方式使用它:
period_to_date <- function(period) {
lubridate::ymd(stringr::str_c(period, "01"))
#Can also use
#as.Date(paste0(period,"01"), "%Y%m%d")
}
tibble_1 %>%
dplyr::mutate(date = period_to_date(period))
# period var_1 var_2 date
# <dbl> <dbl> <dbl> <date>
#1 201901 -0.476 -0.456 2019-01-01
#2 201912 -0.645 1.45 2019-12-01
#3 201902 -0.0939 -0.982 2019-02-01
#4 201903 0.410 0.954 2019-03-01
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句