r - 如何停止 slide() 函数将数字向量计算到列表中?
问题描述
我有data.frame
一列:
Price <- c(1, 2, 5, 3, 1, 4, 7, 10, 6)
df <- data.frame(Price)
我想计算每七个数字的最大值,结果是:
df$MaxPrice <- c(1, 2, 5, 5, 5, 5, 7, 10, 10)
但是,当我尝试使用 and 计算这个新列时mutate()
,slide()
它会在数据框中返回一个列表,而不是数字变量:
library(dplyr)
library(slider)
df <- df %>%
mutate(MaxPrice = slide(Price, max, .before = 7, .after = 0, .complete = F))
为什么会发生这种情况,以及如何slide()
返回数字变量?
解决方案
似乎默认方法要求list
输出。根据?slide
vec_ptype(幻灯片(.x))==列表()
并且描述.ptype
是
.ptype - [向量(0)/空]
对应于输出类型的原型。
如果默认值为 NULL,则输出类型是通过计算对 .f 的调用结果的公共类型来确定的。
如果提供,每次调用 .f 的结果都将转换为该类型,最终输出将具有该类型。
如果 getOption("vctrs.no_guessing") 为 TRUE,则必须提供 .ptype。这是一种使生产代码需要固定类型的方法。
本质上基于源代码(如下),默认情况下返回 alist
并且似乎没有选项可以阻止这种情况,除非我们选择描述的特定方法,即_vec
或_dbl
要么我们可以flatten
library(dplyr)
library(slider)
library(purrr)
out <- df %>%
mutate(MaxPrice = slide(Price, max, .before = 7, .after = 0,
.complete = FALSE) %>% flatten_dbl)
str(out)
#'data.frame': 9 obs. of 2 variables:
# $ Price : num 1 2 5 3 1 4 7 10 6
# $ MaxPrice: num 1 2 5 5 5 5 7 10 10
或者使用特定类型的方法,即slide_dbl
out <- df %>%
mutate(MaxPrice = slide_dbl(Price, max, .before = 7, .after = 0,
.complete = FALSE) )
str(out)
#'data.frame': 9 obs. of 2 variables:
# $ Price : num 1 2 5 3 1 4 7 10 6
# $ MaxPrice: num 1 2 5 5 5 5 7 10 10
如果我们检查 的源代码slide
,它会调用slide_impl
并假设.ptype
aslist
并且没有选项可以传递该信息slide
slide
function (.x, .f, ..., .before = 0L, .after = 0L, .step = 1L,
.complete = FALSE)
{
slide_impl(.x, .f, ..., .before = .before, .after = .after,
.step = .step, .complete = .complete, .ptype = list(),
.constrain = FALSE, .atomic = FALSE)
}
现在,将其与_dbl
方法进行比较
slide_dbl
function (.x, .f, ..., .before = 0L, .after = 0L, .step = 1L,
.complete = FALSE)
{
slide_vec_direct(.x, .f, ..., .before = .before, .after = .after,
.step = .step, .complete = .complete, .ptype = double())
}
推荐阅读
- python-3.x - 字符串的条件排列
- gcc - libavcodec.a(vc1dsp_mmx.o):针对符号“ff_pw_9”重定位 R_X86_64_PC32
- regex - 使用 cpp11 正则表达式时出现正则表达式错误
- swift - 自定义 UIPickerView 栏 Swift
- android - 如果我的应用程序在我的 Android Studio 模拟器上运行缓慢,我的应用程序在设备上是否会运行缓慢?
- java - 在尤里卡服务器中添加尤里卡客户端时出错,客户端模块无法启动
- mysql - mysql concat csv 从两列转换成密钥对
- ios - Apple 如何在 iOS 12 的 iBooks 应用中为一本书创建阴影效果?
- sql - 我可以在这个维度模型中改进什么?
- mysql - Calculate billing usage for current month