繁体   English   中英

将字符串data.frame转换为Date

[英]convert string data.frame to Date

我想知道为什么会发生此错误。 我想在循环中进行顺序转换时使用方括号将其转换。 而且因为我只想能够做到并了解正在发生的事情。

head(clean.deposit.rates)
       Date
1 1/31/1983
2 2/28/1983
3 3/31/1983
4 4/30/1983
5 5/31/1983
6 6/30/1983

class(clean.deposit.rates)
[1] "data.frame"

class(as.Date(clean.deposit.rates[[1]], "%m/%d/%Y"))
[1] "Date"



    class(as.Date(clean.deposit.rates$Date, "%m/%d/%Y"))
[1] "Date"



 as.Date(clean.deposit.rates["Date"], "%m/%d/%Y")
    Error in as.Date.default(clean.deposit.rates["Date"], "%m/%d/%Y") : 
      do not know how to convert 'clean.deposit.rates["Date"]' to class “Date”

您需要使用两个[括号。 如果为1,则该列保留为数据帧。 通过两个,它成为一个原子向量,可以正确地传递给正确的as.Date方法

as.Date(df["Date"], "%m/%d/%Y")
# Error in as.Date.default(df["Date"], "%m/%d/%Y") : 
#   do not know how to convert 'df["Date"]' to class “Date”

由于df["Date"]data.frame类,因此x参数使用as.Date.default因为没有as.Date.data.frame方法。 由于所有if语句的x均为FALSE并通过as.Date.default继续到该行,因此会触发错误

stop(gettextf("do not know how to convert '%s' to class %s", 
     deparse(substitute(x)), dQuote("Date")), domain = NA) 

使用df[["Date"]] ,该列成为向量,并根据向量的类别传递给as.Date.characteras.Date.factor ,并返回所需的结果。

as.Date(df[["Date"]], "%m/%d/%Y")
# [1] "1983-01-31" "1983-02-28" "1983-03-31" "1983-04-30" "1983-05-31"
# [6] "1983-06-30"

如果要对单个数据框中的多列执行此操作,请使用lapply函数。 就像是:

colNames <- c('StartDate','EndDate')

mydf[colNames] <- lapply( mydf[colNames], as.Date, "%m/%d/%Y" )

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM