【发布时间】:2018-03-23 17:08:43
【问题描述】:
我目前正在使用以下方法通过 dbplyr 提取数据集:
connectInfo <- dbConnect(
odbc(),
Driver = "SQL Server",
Server = "myServerName",
Database = "myDatabaseName",
Trusted_Connection = "True"
)
tbl(connectInfo, "tableName") %>%
summarise(
nbDate = LEFT(nbDate, 5),
book,
rateFeeChg
) %>%
mutate(
rateFeeChg = rateFeeChg * 100
)
输出如下:
nbDate book rateFeeChg
<chr> <chr> <dbl>
1 38348 Classic 0.0000000
2 38744 Classic 2.1270990
3 39640 Classic 2.8999999
4 40423 Classic 0.0000000
# ... with more rows
我想要做的是将这些 5 位日期值转换为 mutate 函数内的常规日期值。 我知道通过使用 janitor 库可以轻松转换它,但是当我尝试放置时
mutate(
rateFeeChg = rateFeeChg * 100,
nbDate = janitor::excel_numeric_to_date(nbDate)
)
我收到以下错误:
Error in janitor::excel_numeric_to_date(nbDate) :
object 'nbDate' not found
【问题讨论】:
-
您必须了解,您在
dbplyr链中的 mutate 调用中使用的每个函数都具有对 SQL 的即席转换,或者被尝试作为 SQL 函数,因此您不能使用那里的另一个包中的代码,除非你当然首先使用collect。 -
我认为
as.Date已翻译,因此您可以使用它,但我相信 excel 日期的零与 R 日期不同,因此您可能需要添加或减去一个常数。改造前。 -
@Moody_Mudskipper 感谢您的快速响应。当我尝试使用 as.Date 时收到错误消息:从字符串转换日期和/或时间时转换失败。因此,如果我必须坚持收集,那么我是否只需将输出转换为数据框(例如),然后在列上正常使用我的函数?
-
先尝试转换为数字,我没有看到您的列是字符。
as.Date(as.numeric(nbDate)+whatever_constant_is_needed) -
还可以在这里查看接受的答案,它可能用于格式化日期:stackoverflow.com/questions/47438567/…