错误信息:不知道如何将 'dataFrame$col' 转换为 class “日期”

error message: do not know how to convert 'dataFrame$col' to class “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 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"

实际数据框比这大得多。我想要做的是创建一个新列来表示与每个日期匹配的星期几,并将其添加到数据框中。如果日期是“10/1/2017”,我希望表示星期几的新列在该行中显示 "Sunday"。

这是我希望数据框的样子:

> 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 = 工作日(as.Date(october2017$v6, format="%m/%d/%Y")) october2017 = cbind(october2017,newcol,stringsAsFactors=FALSE)

这是我尝试 运行 此代码的第一行时收到的错误消息: as.Date.default(october2017$v6, format = "%m/%d/%Y") 错误: 不知道如何将 'october2017$v6' 转换为 class “日期”

谁能帮我理解为什么会这样?

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

当您调用 as.Date(x) 时,R 查看第一个对象的 class 并使用适当的 S3 方法。如果找到 none 并且存在 .default 函数,那么它将用作 "last resort".

如果您查看每个方法的源代码,您只会在 as.Date.default:

中找到字符串 "do not know how to convert"
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)
# }

如果它是已知的 classes 之一(characterdatedatesfactornumericPOSIXct,或 POSIXlt,现在也不是 Datelogical-NA),那么它将具有 运行 特定功能(none 其中包括该错误字符串)。这表明您的 $v6 列是 不同的 class。没有 MWE,这完全是猜测。

我建议您找到数据的实际 class

class(dataFrame$v6)

并弄清楚如何将其转换为已知版本之一。

编辑

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

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

当你查看october2017$v6(小写)时,它returns NULL,它触发了as.Date.default方法。

这是几年后的事,但我想添加我用来解决此错误的替代方法。

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

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

我不完全确定为什么有必要在中间步骤中将 as.Date() 调用包装在 data.frame() 中,但我发现没有它它会失败。

希望对您有所帮助!