私はいくつかのDate
列で作業しており、明らかに間違った日付をクレンジングしようとしています。ここsafe.ifelse
に記載されている関数を使用して関数を作成しました。
ここに私のおもちゃのデータセットがあります:
df1 <- data.frame(id = 1:25
, month1 = seq(as.Date('2012-01-01'), as.Date('2014-01-01'), by = 'month' )
, month2 = seq(as.Date('2012-01-01'), as.Date('2014-01-01'), by = 'month' )
, month3 = seq(as.Date('2012-01-01'), as.Date('2014-01-01'), by = 'month' )
, letter1 = letters[1:25]
)
これは、単一の列に対して正常に機能します。
df1$month1 <- safe.ifelse(df1$month1 > as.Date('2013-10-01'), as.Date('2013-10-01'), df1$month1)
Date
複数の列があるので、関数を使用して適用し、すべての列を一度に処理したいと思います。
capDate <- function(x){
today1 <- Sys.Date()
safe.ifelse <- function(cond, yes, no){ class.y <- class(yes)
X <- ifelse(cond,yes,no)
class(X) <-class.y; return(X)}
x <- safe.ifelse(as.Date(x) > as.Date(today1), as.Date(today1), as.Date(x))
}
しかし、私が使用しようとするとsapply()
df1[,dateCols1] <- sapply(df1[,dateCols1], capDate)
またapply()
df1[,dateCols1] <- apply(df1[,dateCols1],2, capDate))
列の書式Date
が失われます。Date
これを回避するために私が見つけた唯一の方法は、を使用してlapply()
からに変換することdata.frame()
です。誰でもこれを説明できますか?
df1[,dateCols1] <- as.data.frame(lapply(df1[,dateCols1], capDate))