假设我有这个向量
v <- c(1:100)
Run Code Online (Sandbox Code Playgroud)
我希望得到这个:
b[1] = sum (v[c(1:10)])
b[2] = sum (v[c(11:20)])
...
...
Run Code Online (Sandbox Code Playgroud)
我可以做一个循环来解决这个问题,但我很确定有一个"R方式"应该是这样的:
b <- groupedSum(v, 10)
Run Code Online (Sandbox Code Playgroud)
其中b将是一个向量,每组10个总和R路是什么?
> tapply( v, (seq_along(v)-1) %/% 10, sum)
0 1 2 3 4 5 6 7 8 9
55 155 255 355 455 555 655 755 855 955
Run Code Online (Sandbox Code Playgroud)
如果那里有NA,你可能需要在之后的参数列表中添加na.rm = TRUE sum.
评论:我认为Tyler的方法更完整,因为它提供了更好的文档.它需要解决cut()我一直认为有错误默认值的功能的变幻莫测.为了创建一个捕获1:100全部的分组,他需要使用101元素向量.但这不是泰勒的错.发给他任何进一步的选票,他的回答更好.
如果gsk可以使用by-objects而不会遇到类困难,那么他是一个比我更好的人.输出看起来像一个列表,但它确实是不同的东西.用他的例子:
> is.list(by(v,idx,sum))
[1] FALSE
> is.matrix(by(v,idx,sum))
[1] FALSE
> is.vector(by(v,idx,sum))
[1] FALSE
Run Code Online (Sandbox Code Playgroud)
我认为by-objects有点像命名向量,有点像矩阵,但是继承矩阵类的失败总是让我感到困惑.
| 归档时间: |
|
| 查看次数: |
12734 次 |
| 最近记录: |