我有以下数据框:
Data <- data.frame(
date = c("2001-01-01", "2001-02-01", "2001-03-01", "2001-04-01", "2001-05-01", "2001-06-01"),
qtr = c("NA", "NA","NA","NA","NA","NA")
)
我想用Year / Quater-fe 01/01填充Data $ qtr(我需要这种格式!)。
我写了一个函数:
fun <- function(x) {
if(x == "2001-01-01" | x == "2001-02-01" | x == "2001-03-01") y <- "01/01"
if(x == "2001-04-01" | x == "2001-05-01" | x == "2001-06-01") y <- "01/02"
return(y)
}
n$qtr <- sapply(n$date, fun)
但这是行不通的。我总是收到错误消息:
Error in FUN(X[[1L]], ...) : Object 'y' not found
为什么?
您需要明确说明Vectorize
您的功能:
fun_v <- Vectorize(fun, "x")
fun_v(Data$date)
#[1] "01/01" "01/01" "01/01" "01/02" "01/02" "01/02"
但是,当涉及或多或少的标准任务(例如日期时间操作)时,总是有一个可用的解决方案:
library(zoo)
yq <- as.yearqtr(Data$date, format = "%Y-%m-%d")
yq
#[1] "2001 Q1" "2001 Q1" "2001 Q1" "2001 Q2" "2001 Q2" "2001 Q2"
要转换为您的特定格式,请使用
format(yq, format = "%y/0%q")
#[1] "01/01" "01/01" "01/01" "01/02" "01/02" "01/02"
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句