标签: cumsum

R可以像现场一样进行操作吗?

在Python中我可以这样做:

a = np.arange(100)
print id(a) # shows some number
a[:] = np.cumsum(a)
print(id(a)) # shows the same number
Run Code Online (Sandbox Code Playgroud)

我在这里做的更换内容a,其cumsum.之前和之后的地址是相同的.

现在让我们在R中尝试一下:

install.packages('pryr')
library(pryr)
a = 0:99
print(address(a)) # shows some number
a[1:length(a)] = cumsum(a)
print(address(a)) # shows a different number!
Run Code Online (Sandbox Code Playgroud)

问题是如何用计算结果覆盖R中已经分配的内存?当我在R与Rcpp中进行向量运算时(在C++中编写代码并从R调用它,这可以避免不必要的分配),缺少这种东西似乎会导致显着的性能差异.

我在Ubuntu Linux 10.04上使用R 3.1.1,具有24个物理内核和128 GB RAM.

memory r matrix cumsum

2
推荐指数
1
解决办法
291
查看次数

重复B列中的值,直到A列发生更改

我需要在B列中重复的值,直到A列发生变化.

这是输入

    Column A  Column B
     18         1
     18         0
     18         0
     18         0
     24         2
     24         0
     18         3
     18         0
     18         0
     18         0
Run Code Online (Sandbox Code Playgroud)

预期产出

   Column A  Column B
    18         1
    18         1
    18         1
    18         1
    24         2
    24         2
    18         3
    18         3
    18         3
    18         3
Run Code Online (Sandbox Code Playgroud)

python group-by python-2.7 pandas cumsum

2
推荐指数
1
解决办法
197
查看次数

累计和忽略了休息

修改数据:

structure(list(hour = c(0L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 0L, 0L, 
1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 1L, 1L, 1L, 0L, 1L, 1L, 0L, 0L), cs = c(0L, 0L, 0L, 0L, 
0L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 
1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L
), cs_acum = …
Run Code Online (Sandbox Code Playgroud)

r cumsum

2
推荐指数
1
解决办法
161
查看次数

很奇怪:cumsum没有在dplyr上工作

上下文:我想将累积和列添加到名为words_uni的tibble中.我使用了库(dplyr),函数mutate.我使用R版本3.4.1 64位 - Windows 10和RStudio版本1.0.143

> head(words_uni)
# A tibble: 6 x 3
# Groups:   Type [6]
Type   Freq         per
<chr>  <int>       <dbl>
1   the 937839 0.010725848
2     i 918552 0.010505267
3    to 788892 0.009022376
4     a 615082 0.007034551
Run Code Online (Sandbox Code Playgroud)

然后我做了以下事情:

> words_uni1 = words_uni %>%
                      mutate( acum= cumsum(per))
> head(words_uni1)
# A tibble: 6 x 4
# Groups:   Type [6]
Type   Freq         per        acum
<chr>  <int>       <dbl>       <dbl>
1   the 937839 0.010725848 0.010725848
2     i 918552 0.010505267 0.010505267
3 …
Run Code Online (Sandbox Code Playgroud)

r cumsum dplyr tibble

2
推荐指数
1
解决办法
1357
查看次数

pandas cumsum 跳过列

我是熊猫的新手,我可以添加到 cumsum 作为

df.cumsum(axis=1)

   y0  y1  y2
0   2   3   4
1   2   2   3
2   0   0   0
3   1   2   3
   y0  y1  y2
0   2   5   9
1   2   4   7
2   0   0   0
3   1   3   6
Run Code Online (Sandbox Code Playgroud)

但是有没有办法只在前 2 列上执行,即跳过 y2?

dataframe pandas cumsum

2
推荐指数
2
解决办法
868
查看次数

使用指定的列数计算累计和

下面你可以看到我有一个更大的桌子的例子

library(data.table)
input  <- data.table(ID     = c("A", "B"),
                     Para   = c(2.8, 5),
                     Value1 = c(50, 80),
                     Value2 = c(80, 40),
                     Value3 = c(80, 100),
                     Value4 = c(60, 10),
                     Value5 = c(40, 80))
Run Code Online (Sandbox Code Playgroud)

我想要实现的是添加一个列,其中包含Para列中指定的下一个x列的累积和.但如果逗号后面有数字,则应按数字调整列中的值.

所以对于第一行(Para = 2.8),结果应该是

1*50 + 1*80 + 0.8*80 = 194
Run Code Online (Sandbox Code Playgroud)

第二行(Para = 5)的结果应该是

1*80 + 1*40 + 1*100 + 1*10 + 1*80 = 310
Run Code Online (Sandbox Code Playgroud)

决赛桌应该是这样的

output <- cbind(input, Result = c(194, 310))
Run Code Online (Sandbox Code Playgroud)

我想到的是将Para值2.8分成5个数字的百分比向量,所以整个范围.

c(1, 1, .8, 0, 0)
Run Code Online (Sandbox Code Playgroud)

将Value1:Value5列与此向量相乘,然后将所有Value1:Value5相加.但是我不知道如何将2.8分成这样一个向量,也许还有一个我不了解的更好的解决方案.谢谢.

r cumsum

2
推荐指数
1
解决办法
190
查看次数

cumsum() 从最后一个条目开始并向后移动

我想从最后一个值计算数字向量的累积总和并向后移动。cumsum()R 中的标准函数通常从第一个值开始并向前移动,就像简单的例子一样 -

cumsum(1:5)
## 1  3  6 10 15
Run Code Online (Sandbox Code Playgroud)

但我想要这样的结果 -

15, 14, 12, 9, 5
Run Code Online (Sandbox Code Playgroud)

是否有任何 R 函数可以直接计算?

r cumsum

2
推荐指数
2
解决办法
64
查看次数

与 R 中的日期相关的条件累积和

我想计算每组5天内的累计总和。

df <- data.frame(
  date = ymd( c( "2022-01-02","2022-01-03","2022-01-05","2022-01-07","2022-01-11","2022-01-14","2022-01-17","2022-01-18","2022-01-24","2022-01-27","2022-01-01","2022-01-04","2022-01-04","2022-01-08","2022-01-12","2022-01-14","2022-01-19","2022-01-24","2022-01-25","2022-01-28")),
  group = c("A","A","A","A","A","A","A","A","A","A","B","B","B","B","B","B","B","B","B","B"),
  number = c(10,30,20,50,30,50,40,50,30,50,55,10,30,20,50,30,40,30,40,30))
Run Code Online (Sandbox Code Playgroud)

下面是我的数据框的一个小样本,包括累积总和列应返回的内容。任何帮助,将不胜感激。谢谢。

date       group number cumsum(s)
2022-01-02 A     10     10
2022-01-03 A     30     40
2022-01-05 A     20     60
2022-01-07 A     50     110
2022-01-11 A     30     80
2022-01-14 A     50     80
2022-01-17 A     40     90
2022-01-18 A     50     140
2022-01-24 A     30     30
2022-01-27 A     50     80
2022-01-01 B     55     55
2022-01-04 B     10     65
2022-01-04 B     30     95
2022-01-08 B     20     60
2022-01-12 B     50     70 …
Run Code Online (Sandbox Code Playgroud)

r conditional-statements cumsum dplyr data.table

2
推荐指数
2
解决办法
173
查看次数

利用大数据优化 cumsum

我正在尝试编写一个代码,从向量中获取每第 7 个累积和值,但使用循环结构运行速度非常慢,因为我的数据太大了。

这是我写的代码。结果是预期的,但正如我所说,它运行得很慢:

for (i in 1:50000) {
  B[i] <- cumsum(A[i:50000])[7]
}
Run Code Online (Sandbox Code Playgroud)

示例:A = 4 1 2 2 6 2 6 6 1 10 5 8 6 9 1

结果必须是:

B[1] = (4+1+2+2+6+2+6) = 23

B[2] = (1+2+2+6+2+6+6) = 25

所以...

谢谢。

loops r cumsum

2
推荐指数
1
解决办法
90
查看次数

R中的"累积差异"功能

是否存在预先存在的函数来计算连续值之间的累积差异?

背景:这是为了估计一个人在CycleStreet.net生成的旅程中必须在两个方向上进行的高度变化.

可重复的例子:

x <- c(27, 24, 24, 27, 28) # create the data
Run Code Online (Sandbox Code Playgroud)

方法1:for循环

for(i in 2:length(x)){ # for loop way
  if(i == 2) cum_change <- 0
  cum_change <-  Mod(x[i] - x[i - 1]) + cum_change
  cum_change
}
## 7
Run Code Online (Sandbox Code Playgroud)

方法2:矢量化

diffs <- Mod(x[-1] - x[-length(x)]) # vectorised way
sum(diffs)

## 7
Run Code Online (Sandbox Code Playgroud)

两者似乎都有效.我只是想知道在基本R中是否存在另一种(更普遍的)实现,或者像dplyr或RcppRoll这样的实现.

r window-functions cumsum

1
推荐指数
1
解决办法
3997
查看次数