我试图计算每组从最后一行到第一行的cumsum
。
样本数据:
t1 <- data.frame(var = "a", val = c(0,0,0,0,1,0,0,0,0,1,0,0,0,0,0))
t2 <- data.frame(var = "b", val = c(0,0,0,0,1,0,0,1,0,0,0,0,0,0,0))
ts <- rbind(t1, t2)
所需格式(按var
分组):
ts <- data.frame(var = c("a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a",
"b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b"),
val = c(2,2,2,2,2,1,1,1,1,1,0,0,0,0,0,2,2,2,2,2,1,1,1,0,0,0,0,0,0,0))
没有显式反转向量的选项:
ave(ts$val, ts$var, FUN = function(x) Reduce(sum, x, right = TRUE, accumulate = TRUE))
[1] 2 2 2 2 2 1 1 1 1 1 0 0 0 0 0 2 2 2 2 2 1 1 1 0 0 0 0 0 0 0
或者与dplyr
相同的方法:
ts %>%
group_by(var) %>%
mutate(val = Reduce(sum, val, right = TRUE, accumulate = TRUE))
使我的评论得到回答;使用:
ts$val2 <- ave(ts$val, ts$var, FUN = function(x) rev(cumsum(rev(x))))
给予:
> ts
var val val2
1 a 0 2
2 a 0 2
3 a 0 2
4 a 0 2
5 a 1 2
6 a 0 1
7 a 0 1
8 a 0 1
9 a 0 1
10 a 1 1
11 a 0 0
12 a 0 0
13 a 0 0
14 a 0 0
15 a 0 0
16 b 0 2
17 b 0 2
18 b 0 2
19 b 0 2
20 b 1 2
21 b 0 1
22 b 0 1
23 b 1 1
24 b 0 0
25 b 0 0
26 b 0 0
27 b 0 0
28 b 0 0
29 b 0 0
30 b 0 0
或者使用dplyr
或data.table
:
library(dplyr)
ts %>%
group_by(var) %>%
mutate(val2 = rev(cumsum(rev(val))))
library(data.table)
setDT(ts)[, val2 := rev(cumsum(rev(val))), by = var]
问题内容: 假设我有带有列的表 TabA : col1-主键(但不包括身份) col2-外键 col3-具有唯一约束 col4-具有检查约束 col5-具有NOT NULL约束 此外, TabA 具有2个触发器: INSTEAD OF INSERT-这个取消插入到 TabA中 (当然),但是在它自己的代码中,将新行插入 TabA中 。保证此新行中所有列的值正确 插入后-此仅打印字符串 现在,我准备
题目链接 牛客网 题目描述 从尾到头反过来打印出每个结点的值。 解题思路 1. 使用递归 要逆序打印链表 1->2->3(3,2,1),可以先逆序打印链表 2->3(3,2),最后再打印第一个节点 1。而链表 2->3 可以看成一个新的链表,要逆序打印该链表可以继续使用求解函数,也就是在求解函数中调用自己,这就是递归函数。 // java public ArrayList printListFro
一、题目 输入个链表的头结点,从尾到头反过来打印出每个结点的值。 二、解题思路 使用栈的方式进行。 将链表从头到尾压入栈内,出栈的过程就对应着从尾到头。 三、解题代码 public class Test { /** * 结点对象 */ public static class ListNode { int val; // 结点的值
从头到尾彻底理解傅里叶变换算法、下 推荐阅读:The Scientist and Engineer’s Guide to Digital Signal Processing,By Steven W. Smith, Ph.D。此书地址:http://www.dspguide.com/pdfbook.htm。 前期回顾,在上一篇里,我们讲了傅立叶变换的由来、和实数形式离散傅立叶变换(Real DFT)
从头到尾彻底理解傅里叶变换算法、上 I、本文中阐述离散傅里叶变换方法,是根据此书:The Scientist and Engineer’s Guide to Digital Signal Processing,By Steven W. Smith, Ph.D.而翻译而成的,此书地址:http://www.dspguide.com/pdfbook.htm。 II、同时,有相当一部分内容编辑整理自dz
问题内容: 我正在尝试计算阶乘产生的数字的尾随零(这意味着数字变得很大)。以下代码采用一个数字,计算该数字的阶乘,并计算尾随零。但是,当数字大约为25!时,numZeros将不起作用。 我并不担心这段代码的效率,并且我知道有多种方法可以使这段代码的效率更好。我要弄清楚的是为什么计数大于25的数字结尾的零!不管用。 有任何想法吗? 问题答案: 您的任务不是计算阶乘,而是计算零的数量。一个好的解决方案