错误信息:不知道如何将 '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 之一(character
、date
、dates
、factor
、numeric
、POSIXct
,或 POSIXlt
,现在也不是 Date
或 logical
-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() 中,但我发现没有它它会失败。
希望对您有所帮助!
我有一个包含 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 之一(character
、date
、dates
、factor
、numeric
、POSIXct
,或 POSIXlt
,现在也不是 Date
或 logical
-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() 中,但我发现没有它它会失败。
希望对您有所帮助!