R 错误消息:不知道如何转换';数据帧$col';至第“类;日期”;

R 错误消息:不知道如何转换';数据帧$col';至第“类;日期”;,r,as.date,R,As.date,我有一个包含2017年10月记录的数据框。第6列将日期作为字符向量 这就是它看起来的样子: > october2017[1:6,1:6] V1 V2 V3 V4 V5 V6 1 89108060 IN0000005 P2 RK1 CA1-R 10/1/2017 2 10503818 IN0000014 P2 RK1 CA31 10/2/2017 3 89108152 765000054 P2 RK1 CA31 10/3/2017 4

我有一个包含2017年10月记录的数据框。第6列将日期作为字符向量

这就是它看起来的样子:

> october2017[1:6,1:6]
        V1        V2 V3  V4    V5        V6
1 89108060 IN0000005 P2 RK1 CA1-R 10/1/2017
2 10503818 IN0000014 P2 RK1  CA31 10/2/2017
3 89108152 765000054 P2 RK1  CA31 10/3/2017
4 89108152 765000197 P2 RK1  CA31 10/4/2017
5 89108206 200000162 P2 RK1  CA31 10/5/2017
6 89108206 100001098 P2 RK1  CA31 10/6/2017
> class(october2017$V6)
[1] "character"
实际的数据帧比这个大得多。我想做的是创建一个新列来表示与每个日期匹配的星期几,并将其添加到数据框中。如果日期为“2017年10月1日”,我希望表示一周中某一天的新列在该行中显示“星期日”

这就是我希望数据帧的外观:

> october2017[1:6,1:7]
        V1        V2 V3  V4    V5        V6     V7
1 89108060 IN0000005 P2 RK1 CA1-R 10/1/2017 Sunday
2 10503818 IN0000014 P2 RK1  CA31 10/2/2017 Monday
3 89108152 765000054 P2 RK1  CA31 10/3/2017 Tuesday
4 89108152 765000197 P2 RK1  CA31 10/4/2017 Wednesday
5 89108206 200000162 P2 RK1  CA31 10/5/2017 Thursday
6 89108206 100001098 P2 RK1  CA31 10/6/2017 Friday
这就是我所尝试的: newcol=工作日(截止日期(2017年10月$v6,格式=“%m/%d/%Y”)) 2017年10月=cbind(2017年10月,newcol,stringsAsFactors=假)

这是我尝试运行此代码的第一行时收到的错误消息: as.Date.default(2017年10月$v6,格式=“%m/%d/%Y”)中出错: 不知道如何将“2017年10月$v6”转换为类“日期”


有人能帮我理解为什么会发生这种情况吗?

as.Date是一个使用S3方法分派的函数。也就是说,实际上有几个功能:

methods("as.Date")
# [1] as.Date.character as.Date.date      as.Date.dates     as.Date.default  
# [5] as.Date.factor    as.Date.numeric   as.Date.POSIXct   as.Date.POSIXlt  
# see '?methods' for accessing help and source code
当您将
调用为.Date(x)
时,R会查看第一个对象的类并使用适当的S3方法。如果没有找到,并且存在一个
.default
函数,那么这将作为“最后手段”

如果查看每个方法的源代码,您只会在
as.Date.default
中找到字符串
“不知道如何转换”

as.Date.default
# function (x, ...) 
# {
#     if (inherits(x, "Date")) 
#         return(x)
#     if (is.logical(x) && all(is.na(x))) 
#         return(structure(as.numeric(x), class = "Date"))
#     stop(gettextf("do not know how to convert '%s' to class %s", 
#         deparse(substitute(x)), dQuote("Date")), domain = NA)
# }
如果它是一个已知的类(
character
date
dates
factor
numeric
POSIXct
,或
POSIXlt
,现在也不是
date
logical
-
NA
),那么它将运行特定的函数(其中没有一个包含该错误字符串)。这表明您的
$v6
列是另一个类。如果没有MWE,则完全是推测

我建议您查找数据的实际类别

class(dataFrame$v6)
并找出如何将其转换为已知版本之一

编辑

此外,请注意R是区分大小写的。您的MWE使用小写的
v6
,但是您的列名是大写的。只使用

october2017$V7 <- weekdays(as.Date(oct$V6, format="%m/%d/%Y"))

2017年10月$V7这是事实发生后的几年,但我想添加我用来绕过此错误的替代方法

首先,我将包含日期的字符向量拉入一个新向量,然后将其转换为包含日期类向量的1列数据帧。从那里,我可以覆盖日期中的原始列

dates <- data$date.column
dates <- data.frame(as.Date(dates, format = "%Y-%m-%d"))
data$date.column <- dates

问题中包含a的日期将增加您获得答案的机会。@Cedric,实际上这对factors仍然有效,请尝试
as.Date(factor(“5/11/2017”),格式=“%m/%d/%Y”)
,所以它表明,
$v6
是另外一回事。我支持MWE的投票。@r2evans谢谢你的检查,我已经删除了我对factor类的评论。Jennifer check r2evans回答。@Cedric,我经常做出同样的假设并跳到这一步,我的习惯是很少使用factors(坦率地说,主要用于
ggplot
刻面)。偶尔,当我意外地拥有它们时,我会感到惊讶,而且它们仍然按设计工作。想想看。是的,谢谢你的评论,
stacomirtools::killfactor()
有点开玩笑,但解决了我的很多问题……詹妮弗,你有什么想法或意见吗?dataFrame$v6是一个由如下字符串组成的字符向量:“2017年10月1日”“2017年10月2日”“2017年10月3日”“2017年10月4日”“2017年10月5日”“2017年10月6日”等等。我想做的是将它们从字符串更改为R将识别为日期的字符串。我以为这就是as.Date函数应该做的???!但是如果as.Date不起作用,那么什么会起作用呢?Jennifer,我真的不能不看更多就知道了。我不能通过StackOverflow访问并查看计算机上的数据,你需要编辑你的任务请阅读其中一个或两个链接,然后编辑您的问题,添加一个显示您的困难的最小工作示例。很抱歉没有包含MWE。我现在要叠加溢出。我为您重写了问题。您能重现我的MWE吗?谢谢ns.我将该列的名称从v6/v6(以两者为准)更改为Delivery.Date,然后更改为2017年10月$V7