gpt4 book ai didi

r - 来自前 k 个值的第 n 个最小值

转载 作者:行者123 更新时间:2023-12-03 20:02:34 26 4
gpt4 key购买 nike

我有以下数据表(使用 data.table 包)。

Month   ER
196307 -0.39359311
196308 5.06729343
196309 -1.56222299
196310 2.53955005
196311 -0.85428909
对于每一行,我想添加一列 VR ,其具有前三个值 ER 中的第二大值.例如,对于 196311,它将是 2.53955,对于 196310,它将是 -0.39359311。

最佳答案

(@akrun 比我快了几秒钟。)不确定您是否有文字 data.table (即,在 data.table 包中):无论如何,rollapply (来自 zoo 如果您有“常规”数据)或 frollapply (如果您使用的是 data.table )...

dd <- read.table(header=TRUE, text="
Month ER
196307 -0.39359311
196308 5.06729343
196309 -1.56222299
196310 2.53955005
196311 -0.85428909
")

library(zoo)

dd$VR <- rollapply(dd$ER, width=4, FUN= function(x) sort(x[-4])[2],
fill=NA, align="right")
## [1] NA NA NA -0.3935931 2.5395500
rollapply包括当前值,为了获得前 3 个值中的第二大值,我一次取四个值并忽略第四个值 ( x[-4] ); @akrun 的解决方案使用 lag()相反(这似乎稍微好一些,尽管它确实会导致对 tidyverse 的依赖,而您可能不想要这种依赖)。
还有@akrun 的解决方案在 -x 上排序(颠倒顺序):在这种情况下,由于您指定了三个值中的第二大值,因此排序顺序无关紧要,但是您的问题标题(“从前 k 开始的第 n 个最低”)确实表明倒序-订购将是一个好主意。

关于r - 来自前 k 个值的第 n 个最小值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64948588/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com