如何检查向量是否是 LIFO/FIFO 递减

2024-01-01

假设我有一个 data.table,其中每行由两个向量组成:

  1. “预减法”向量。
  2. “减法后”向量。

减法前是最左半列,减法后是最右列,末尾带有后缀“prm”。

例如:

#Sample Data
set.seed(2)
fill = data.table(n=1:7)
Tp=3

  for(t in 1:Tp){ 
     set(x = fill, j = paste0('v',t), value = sample(0:10,7))
  }

fill[1,paste0('v',3):=0]
fill[5,paste0('v',2):=0]
fill[5,paste0('v',3):=0]

for(t in 1:Tp){ 
  fill[,paste0('v',t,'prm'):=get(paste0('v',t))]
}


fill[1,paste0('v',1,'prm'):=0] 
fill[2,paste0('v',2,'prm'):=1]   
fill[5,paste0('v',3,'prm'):=1]  
fill[7,paste0('v',3,'prm'):=2] 

数据:

> fill
   n         v1         v2         v3          v1prm         v2prm        v3prm
1: 1          2          9          0             0             9             0
2: 2          7          4          8             7             1             8
3: 3          5         10          9             5            10             9
4: 4          1          8          1             1             8             1
5: 5          6          0          0             6             0             1
6: 6          8          7          0             8             7             0
7: 7          0          0          6             0             0             2

后进先出向量必须先向右元素递减,然后才能影响更左边的元素。第一行违反了 LIFO 因为

(2, 9, 0) --> (0, 9, 0)应该从最左边单元的 2 之前的 9 中减去 2。

我想进行子集化,以仅包含具有“prm”列的行作为非 prm 列的 LIFO 减法。例如。

   n         v1         v2          v3          v1prm         v2prm        v3prm
1: 3          5         10          9             5            10             9
2: 4          1          8          1             1             8             1
3: 6          8          7          0             8             7             0
4: 7          0          0          6             0             0             2       

EDIT:

LIFO(后进先出)和 FIFO(先进先出)是对某些元素进行优先级排序的减法方法。

考虑一个数字向量 (a,b,c)。将“c”视为最新的,将“a”视为最近的。

该向量中的单元总数为 a+b+c。

如果我们从中减去 d 个单位,在 LIFO 或 FIFO 减法下,我们不会从每个元素中减去 d,而是从最近的 (LIFO) 或最近的 (FIFO) 中按元素减去它,直到它耗尽(使用分钟为 0)。

例如

后进先出:(3,2,1) - 5 = (3,2,1 - 5) --> (3,2 -4 ,0) --> (3 -2 ,0,0) --> (1 ,0,0)

先进先出:(3,2,1) - 5 = (3-5,2,1) --> (0,2 -2 ,1) --> (0 ,0,1)


以下是在过滤具有 lifo 向量的行之前首先计算 lifo 向量的可能方法:

#convert into long format from MichaelChirico and svenkatesh
tbl <- melt(fill, meas=patterns("^v[1-9]$", "prm$"), 
    value.name=c("bef","aft"))
setorder(tbl, n, -variable)

     #filter for those lifo vector
fill[n %in% 
        tbl[, {
                #calculate stock taken out
                dif <- sum(bef) - sum(aft)

                #calculate lifo vector
                lifo <- pmin(pmax(cumsum(bef) - dif, 0L), bef)

                #check if after is this lifo vector
                identical(lifo, aft)

            }, by=.(n)][(V1), n]
    ]

output:

   n v1 v2 v3 v1prm v2prm v3prm
1: 3  5 10  9     5    10     9
2: 4  1  8  1     1     8     1
3: 6  8  7  0     8     7     0
4: 7  0  0  6     0     0     2

data:

library(data.table)
fill <- structure(list(n = 1:7, v1 = c(2L, 7L, 5L, 1L, 6L, 8L, 0L), v2 = c(9L, 
    4L, 10L, 8L, 0L, 7L, 0L), v3 = c(0L, 8L, 9L, 1L, 0L, 0L, 6L), 
    v1prm = c(0L, 7L, 5L, 1L, 6L, 8L, 0L), v2prm = c(9L, 1L, 
        10L, 8L, 0L, 7L, 0L), v3prm = c(0L, 8L, 9L, 1L, 1L, 0L, 2L
        )), row.names = c(NA, -7L), class = c("data.table", "data.frame"
        ))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何检查向量是否是 LIFO/FIFO 递减 的相关文章

  • 在 data.table 中进行浅复制

    我在一个 SO 主题中读到 Matt Dowle 关于一个问题的回答shallow函数进行浅拷贝data table 然而 我再也找不到话题了 data table没有任何调用的导出函数shallow 有一个内部的 但没有记录 我可以安全地
  • queue.Queue 与 collections.deque

    我需要一个队列 多个线程可以将内容放入其中 并且多个线程可以从中读取 Python至少有两个队列类 queue Queue and collections deque 前者似乎在内部使用后者 两者在文档中都声称是线程安全的 但是 那Queu
  • 通过 knit 和 igraph 在乳胶中绘制 tkplot

    这可能是一个疯狂的奇怪的梦 我梦想着我可以放一个tkplot from igraph在乳胶文档中通过knitr 我知道一辉对动画很了解 所以我想也许这是可能的 谷歌搜索没有显示我想要什么 所以这是一个无效的尝试 documentclass
  • 使用 Eclipse 和 Rserve 从 Java 调用 R 的简单程序

    我的应用程序必须执行 R 操作 例如 m matrix sample 0 1 100 rep T ncol 10 结果应该可供 Java 应用程序使用 The 预留套餐 http www rforge net Rserve 将 R 与其他语
  • 将数据框中的字符向量与另一个字符向量进行匹配并修剪字符

    这是一个数据框和一个向量 df1 lt tibble var1 c abcd efgh ijkl qrst vec lt c abcd mnop ijkl 现在 对于 var1 中与 vec 中的值匹配的所有值 仅保留 var1 中的前 3
  • 计算一列中正数和负数的数量

    我想计算数据帧的一列中正值和负值的数量 我在 R 中该怎么做 例如 这里是数据框 logFC logCPM LR PValue FDR Bra15066 5 630822 5 184586 73 79927 8 647868e 18 4 0
  • 数据表内部索引已损坏

    我正在使用 C 中的 NET WinForms 应用程序 针对 3 5 NET 框架运行 在此应用程序中 我设置 Expression 成员DataColumn in a DataTable 像这样 DataColumn column dt
  • 使用 R Shiny 从 XLConnect 下载 Excel 文件

    有没有人尝试过使用 R Shiny 中的下载处理程序通过 XLConnect 下载新创建的 Excel 文件 在 ui R 中有一行不起眼的行 downloadButton downloadData Download 在 server R
  • decompose() 的周期太少[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 错误看起来像这样 decompose
  • std::cout 语句评估顺序[重复]

    这个问题在这里已经有答案了 pop 函数有什么问题 为什么它不能正常工作 class stack int p Cursor int size public stack int sz Cursor p new int size sz 1 co
  • ggplot2可以在一个图例中分别控制点大小和线大小(线宽)吗?

    一个使用的例子ggplot2绘制数据点组和连接每组均值的线 并使用相同的映射aes for shape并为linetype p lt ggplot mtcars aes gear mpg shape factor cyl linetype
  • 将年月格式转换为 POSIXct [重复]

    这个问题在这里已经有答案了 我有一些年月形式的数据 我想将其格式化以用于绘图ggplot date lt c 2016 03 2016 04 2016 05 2016 06 2016 07 2016 08 2016 09 2016 10 2
  • 是否可以通过扫描从控制台读取而不回显字符?

    这是一个示例函数 passwordEntry lt function cat Enter your password pwd lt scan n 1 what character quiet TRUE invisible pwd 并测试该功
  • 如何在for循环中引用变量?

    我正在循环访问不同的 data tables 和 data table 中的变量 但我在引用内部变量时遇到问题for loop dt1 lt data table a1 c 1 2 3 a2 c 4 5 2 dt2 lt data tabl
  • 使用 broom 和 tidyverse 总结 r 平方游戏

    我发布了一个问题here https stackoverflow com questions 48627287 getting adjusted r squared value for each line in a geom smooth
  • R中的一元加/减是什么?

    来自 R 的详细信息部分Syntax http stat ethz ch R manual R patched library base html Syntax html帮助页面 定义了以下一元和二元运算符 他们被列出 在优先级组中 从最高
  • R foreach问题(某些进程返回NULL)

    我遇到了问题foreach我正在 R 中使用的程序的一部分 该程序用于运行不同参数的模拟 然后将结果返回到单个列表 然后用于生成报告 当并非所有分配的模拟运行都在报告上实际可见时 就会出现问题 从各方面来看 似乎只有分配的运行的一个子集实际
  • 在 R 中向散点图添加线条

    如何向图表添加线条 我做了以下 dat lt data frame xvar 1 20 rnorm 20 sd 10 yvar 1 20 rnorm 20 sd 10 zvar 1 20 rnorm 20 sd 10 plot dat 1
  • 如何使用 R 计算成为列表中中位数的概率?

    假设我有以下数据集 其中显示了假设实验的每个状态的三个观察结果的列表 state lt c Iowa Minnesota Illinois outcome lt list c 5 11 11 c 3 12 8 c 9 14 2 dat lt
  • 如何使用 usmap 标记数字而不是名称?

    我知道 usmap 有一个选项label in plot usmap 我想标记一些数字 而不是状态名称 我想 usmap 中应该有与州质心坐标相关的数据 但我不知道如何找到它 如果我能得到 坐标然后我可以用它来标记数字geom text 这

随机推荐

  • [React]将异步数据获取到组件中的不同方式

    我对 React 世界有点陌生 最近当我开始在组件内编写 Ajax 内容时 我感到很困惑 据我所知 这里有两种渲染方式异步将数据放入组件中 如下所示 1st way class MyComponent extends React Compo
  • 使用 free() 时出现分段错误

    此代码会导致分段错误 int main char p char a 50 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa p char malloc 50 sizeof char if p
  • “[文章] 使用 WSO2 API Manager 启用 API 货币化”相关问题

    我尝试根据文章将 POC WSO2 APIM 与计费引擎集成1 http wso2 com library articles 2016 07 article enabling monetization of apis with wso2 a
  • 将值和数字格式从一个范围复制到另一个范围?

    下面的行没有出现错误 我将值从一个范围复制到另一个范围 ThisWorkbook Sheets Output Range F lastRowOutput 1 M lastRowOutput 1 Value projectWb Sheets
  • 使用 Zoom SDK 最小化视频通话和共享视图

    我正在尝试将 Zoom SDK 会议集成到 Android 应用程序中 我已经努力使用自定义会议用户界面并学习如何使用 Zoom 的视频视图 称为MobileRTCVideoView 这是我想创建的界面 我尝试过的 研究了 Zoom 的示例
  • 在本机 C++ 中锁定 GDI+ 位图?

    我可以找到很多关于如何在托管 c 中执行此操作的示例 但没有找到非托管的示例 我希望尽可能高效地获取所有像素数据 但我需要更多有关 scan0 内容的一些信息 以便我可以正确地迭代像素数据并从中获取每个 rgba 值 现在我有这个 Bitm
  • lxml 在 Solaris 10 上构建

    请您就 python 2 6 6 和 lxml Solaris 10 构建问题提供帮助和建议吗 安装说明 www sunfreeware com download html 直接链接到文件 http www sunfreeware com
  • CSS 动画 onclick 和反转 next onclick

    我正在使用精灵表和关键帧在单击按钮时为按钮上的图像设置动画 当单击按钮时 我希望帧沿一个方向运行 并将按钮保留在精灵表中的最后一个图像上 当再次单击按钮时 我希望相同的帧向后运行 将按钮保留在精灵表中的第一个图像上精灵表 我目前正在尝试使用
  • 将更新的函数传递给现有函数

    在这个简短的序列中 用户创建了一个函数userfunc 但随后想要更新第一个定义以执行不同的操作 但是 那programfunc 已经编译了第一个版本 并继续使用它 userfunc str n str n userfunc hello 3
  • 处理 iOS 和 Android 上的推送通知场景

    我想为应用程序 iOS 和 Android 实现推送通知 并需要澄清以下场景 我了解推送通知的一般工作原理和局限性 我确实阅读了文档 但这让我感到困惑 并且没有回答我所有的问题 iOS 和 Android 中如何处理以下场景 当设备关闭时
  • 单声道安卓。单元测试框架[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 是否有一些支持单声道 Android 应用程序的单元测试框架 我已经尝试过默认的 Visual Studio 测试框架和 NUnit 框架
  • 多个 ssh 密钥

    好吧 我在 ssh 帖子中看到了拥有多个私钥的答案 但我没有获得足够的声誉来添加任何评论 所以我必须写一个新问题 对此感到抱歉 在帖子中 给出的答案是配置文件 用于将每个主机 用户名定向 指向 它应该使用的私钥文件 但是有没有办法拥有一个供
  • 面板.repaint();打乱布局

    JPanel启动 p new JPanel private static final long serialVersionUID 1L public void paintComponent Graphics g if errors 1 g
  • 使用 SSIS 发送邮件任务发送邮件

    我想使用 SSIS 发送带有附件的电子邮件 但出现以下错误 发送邮件任务 错误 发生错误并出现以下错误 消息 SMTP 服务器需要安全连接 否则客户端 未经过验证 服务器响应为 5 5 1 身份验证 必需的 了解更多信息 请访问 下面是我的
  • 创建可扩展 WPF 用户控件的提示

    我是 WPF 新手 我正在创建一个应用程序 允许我控制我的 MIDI 设备 为此 我创建了一个键盘用户控件 我认为它看起来很棒 但我不知道如何设计它 以便它在绘制到窗口时可以缩放 有人可以帮忙提供修改以下 xaml 的任何提示吗
  • Android 进度条不显示

    我有一个应该在 AsyncTask 中运行的进度条 但它没有出现 尽管任务运行 XML
  • strtolower 和 mb_strtolower 有什么区别?

    在 PHP 中 有什么区别strtolower and mb strtolower 如果我想将提交的电子邮件地址转换为小写 我应该使用哪一个 有没有这样的邮件 email protected cdn cgi l email protecti
  • 如何从Linux命令行使用curl发送数据?

    我正在尝试通过 wifi 连接从嵌入式 Linux 设备传输数据 我的设备上有curl 和wget 如何使用curl或wget将数据传输出设备 欢迎任何指点 如果您只想发送 键 值 对 那么 curl d key1 value1 d key
  • Perl:如果 IPC::Run 终止,则从进程中检索输出

    我一直在运行一些命令IPC Run https metacpan org pod IPC Run模块 一切都很好 除了我无法访问输出 STDOUT STDERR 生成的过程并被重定向到变量中 有没有办法在错误处理中检索这些内容 comman
  • 如何检查向量是否是 LIFO/FIFO 递减

    假设我有一个 data table 其中每行由两个向量组成 预减法 向量 减法后 向量 减法前是最左半列 减法后是最右列 末尾带有后缀 prm 例如 Sample Data set seed 2 fill data table n 1 7