mutate in dplyr 修改结果但不修改我收集的数据库中的表是你想要的。
该问题没有说明正在使用哪个数据库,这很重要,但在没有使用 SQLite 的情况下,下面将使用它。
1) 下面是使用 RSQLite 包更新数据库中的表 DF 并带有 DATE 列的代码。可能需要(DOY-1) 来代替DOY,具体取决于DOY 的来源(0 或1)。您可能还需要将 DOY 转换为整数,但在我的运行中,没有它也可以工作。
library(RSQLite)
# create test database with a table DF
con <- dbConnect(SQLite())
DF <- data.frame(YEAR = 2014, DOY = 15)
dbWriteTable(con, "DF", DF)
# add DATE column to table DF and update its value
dbGetQuery(con, "alter table DF add column DATE")
dbGetQuery(con, "update DF
set DATE = date(cast(YEAR as integer) || '-01-01', DOY || ' days')")
给予:
dbGetQuery(con, "select * from DF")
## YEAR DOY DATE
## 1 2014 15 2014-01-16
2) 如果您只是想修改结果而不是数据库本身,那么假设 SQLite 再试一次:
library(dplyr)
library(RSQLite)
# create database and add table DF to it
db <- src_sqlite(path = tempfile(), create = TRUE) # test database
DF <- data.frame(YEAR = 2014, DOY = 15) # test data
dbWriteTable(db$con, "DF", DF)
db_DF <- tbl(db, "DF")
db_DF %>%
mutate(DATE = sql("date(cast(YEAR as integer) || '-01-01', DOY || ' days')"))
更新 (1) 使用 RSQLite 并修改数据库。 (2) 使用 dplyr 而没有。