我在时间转换中遗漏了什么吗?非常简单的例子:
library(lubridate)
time <- "2019-01-14 10:58:23.438000"
op <- options(digits.secs=6)
ymd_hms(time, tz = "Europe/Helsinki")
[1] "2019-01-14 10:58:23.437 EET"
ymd_hms(time)
[1] "2019-01-14 10:58:23.437 UTC"
Run Code Online (Sandbox Code Playgroud)
为什么这里的毫秒数是一秒?似乎不是四舍五入的问题?
虽然这似乎有效:
time <- "2019-01-14 10:58:23.123456"
op <- options(digits.secs=6)
ymd_hms(time)
[1] "2019-01-14 10:58:23.123456 UTC"
Run Code Online (Sandbox Code Playgroud)
会话信息
sessionInfo()
R version 3.5.1 (2018-07-02)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200)
Matrix products: default
locale:
[1] LC_COLLATE=Finnish_Finland.1252 LC_CTYPE=Finnish_Finland.1252 LC_MONETARY=Finnish_Finland.1252 LC_NUMERIC=C
[5] LC_TIME=Finnish_Finland.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] lubridate_1.7.4 …
Run Code Online (Sandbox Code Playgroud) 我在理解 group_by 如何在 tidyverse 中工作时遗漏了一些内容。示例将阐明:
我创建了以下函数,它需要很少的参数并计算 tibble 内的最佳权重(可能不是最漂亮的,但似乎有效):
library(lpSolveAPI)
library(tidyverse)
weights_fun <- function(data_tbl, objective, constraint){
cols <- c("objective", "constraint")
linear.dt <- data_tbl %>% select_(.dots = cols)
lp.mod <- make.lp(0, NROW(linear.dt))
set.objfn(lp.mod, linear.dt$amount)
lp.control(lp.mod,sense="max")
add.constraint(lp.mod, linear.dt$duration, "=", 6)
add.constraint(lp.mod, rep(1, nrow(linear.dt)), "=", 1)
set.bounds(lp.mod, upper = rep(0.4, nrow(linear.dt)))
set.bounds(lp.mod, lower = rep(0.10, nrow(linear.dt)))
solve(lp.mod)
weights <- round(get.variables(lp.mod), 4)
return(weights)
}
Run Code Online (Sandbox Code Playgroud)
当我在 tibble 中只有一组时,这个函数效果很好。我创建函数的方法是尝试通过在一个函数上进行测试来使其工作,并希望当我稍后对数据进行切片时它能够工作。
weights_fun(one_group, "amount", "duration")
one_group$weights <- weights_fun(one_group, "amount", "duration")
# A tibble: 5 x 6
date country bucket amount …
Run Code Online (Sandbox Code Playgroud) 我有一个非常简单的问题,会产生错误。示例将清除这一点。
library(odbc)
library(DBI)
library(dplyr)
library(dbplyr)
con <- dbConnect(odbc(), "myDSN")
tbl_test <- tibble(ID = c("A", "A", "A", "B", "B", "B"),
val = c(1, 2, 3, 4, 5, 6),
cond = c("H", "H", "A", "A", "A", "H"))
dbWriteTable(con, "tbl_test", tbl_test, overwrite = TRUE)
Run Code Online (Sandbox Code Playgroud)
将简单表写入数据库后,我在 db 中添加到表的链接,并尝试使用正常工作的简单条件总和。但是会遇到错误。
db_tbl <- tbl(con, in_schema("dbo", "tbl_test"))
db_tbl %>%
group_by(ID) %>%
summarise(sum = sum(val, na.rm = TRUE),
count_cond = sum(cond == "H", na.rm=TRUE),
sum_cond = sum(val == "H", na.rm=TRUE))
Error: <SQL> 'SELECT TOP 10 "ID", SUM("val") AS "sum", …
Run Code Online (Sandbox Code Playgroud) 我试图按组通过 data.table 滚动我的函数并遇到问题。不确定我应该更改我的功能还是我的调用错误。这是一个简单的例子:
数据
test <- data.table(return=c(0.1, 0.1, 0.1, 0.1, 0.1, 0.2, 0.2, 0.2, 0.2, 0.2),
sec=c("A", "A", "A", "A", "A", "B", "B", "B", "B", "B"))
Run Code Online (Sandbox Code Playgroud)
我的职能
zoo_fun <- function(dt, N) {
(rollapply(dt$return + 1, N, FUN=prod, fill=NA, align='right') - 1)
}
Run Code Online (Sandbox Code Playgroud)
运行它(我想创建新的列动量,这只是最新 3 个观察值的乘积,每个观察值加一个(因此分组依据 = 秒)。
test[, momentum3 := zoo_fun(test, 3), by=sec]
Warning messages:
1: In `[.data.table`(test, , `:=`(momentum3, zoo_fun(test, 3)), by = sec) :
RHS 1 is length 10 (greater than the size (5) of group 1). The …
Run Code Online (Sandbox Code Playgroud)