我有一个带有YEAR
和DOY
(一年中的某天)列的数据库。我想添加一个额外的列DATE
,例如
mutate(data, DATE = date(julianday(YEAR || '-01-01'), '+'||(DOY-1)||' day'))
但这不起作用,可能是因为SQL字符串串联为“ ||” 转换为“ OR”。你会怎么做?
在另一种情况下,我必须在SQL日期对象中转换字符串。在RI将使用lubridate
和ymd
是否有同样简单的方式与做mutate
在dplyr(SQL)?
克里斯托夫
mutate
在dplyr中修改结果,但不修改您要收集的数据库中的表。
这个问题没有说明正在使用哪个数据库,这很重要,但是下面没有使用该SQLite。
1)这是使用RSQLite包使用列更新DF
数据库中表的代码DATE
。(DOY-1)
可能需要DOY
根据的来源(0或1)来代替DOY
。您可能还需要强制转换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而不使用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句