请选择 进入手机版 | 继续访问电脑版
楼主: 李会超
25578 15

[问答] 如何实现分组累计求和 [推广有奖]

  • 1关注
  • 31粉丝

教授

28%

还不是VIP/贵宾

-

威望
0
论坛币
121197 个
通用积分
59.1084
学术水平
140 点
热心指数
152 点
信用等级
84 点
经验
55966 点
帖子
1111
精华
1
在线时间
1119 小时
注册时间
2008-11-6
最后登录
2022-7-22

李会超 发表于 2014-10-21 13:31:45 |显示全部楼层 |坛友微信交流群
相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
假如有如下数据
namefenshu
b

1

b

2

b

3

a

4

a

5

要实现效果如下
namefenshu累计
b

1

1

b

2

3

b

3

6

a

4

4

a

5

9

不要用循环,各位有什么好的办法
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:如何实现 name MEF fen Hub 如何

学无止境,坚持!
mymei 发表于 2014-10-21 14:04:53 |显示全部楼层 |坛友微信交流群
假如只有几组数的话可以这样:
  1. name <- c("b","b","b","a","a")
  2. fenshu <- 1:5
  3. temp <- tapply(fenshu,name,cumsum)
  4. leiji <- c()
  5. leiji[which(name=="a")] <- temp$a
  6. leiji[which(name=="b")] <- temp$b
复制代码

已有 1 人评分经验 收起 理由
李会超 + 36 热心帮助其他会员

总评分: 经验 + 36   查看全部评分

使用道具

李会超 发表于 2014-10-21 14:10:51 |显示全部楼层 |坛友微信交流群
mymei 发表于 2014-10-21 14:04
假如只有几组数的话可以这样:
这个是个方法,但如果name很多呢,不只是有a,b

使用道具

jmpamao 发表于 2014-10-21 14:52:34 |显示全部楼层 |坛友微信交流群
李会超 发表于 2014-10-21 14:10
这个是个方法,但如果name很多呢,不只是有a,b
name =a、b 。。。排序后影响你的数据吗?
如果不重要,可以先排序,按照楼上的得出的 unlist(temp)应该可以一一对应了
试试看~
已有 1 人评分经验 收起 理由
李会超 + 24 热心帮助其他会员

总评分: 经验 + 24   查看全部评分

使用道具

李会超 发表于 2014-10-21 15:05:05 |显示全部楼层 |坛友微信交流群
jmpamao 发表于 2014-10-21 14:52
name =a、b 。。。排序后影响你的数据吗?
如果不重要,可以先排序,按照楼上的得出的 unlist(temp)应该可 ...
恩,name排序后用tapply函数,再unlist也可以。就是想看看有其他更简单的方法没,因为发现用tapply后会得到默认对name升序的累计值

使用道具

jmpamao 发表于 2014-10-21 15:10:21 |显示全部楼层 |坛友微信交流群
李会超 发表于 2014-10-21 15:05
恩,name排序后用tapply函数,再unlist也可以。就是想看看有其他更简单的方法没,因为发现用tapply后会得 ...
tapply 是默认按照factor 分类的,同求其他方法

好久没来,R 都要陌生了,罪过!

使用道具

yywan0913 在职认证  发表于 2014-10-21 15:21:13 |显示全部楼层 |坛友微信交流群
  1. t=data.frame(name=c("b","a","b","a","a"),fenshu=1:5)
  2. new=data.frame(t[order(t[,1]),],p=unlist(tapply(t[,2],t[,1],cumsum)))
  3. new
复制代码
已有 1 人评分论坛币 收起 理由
李会超 + 12 也是要排序,有不排序的方法否

总评分: 论坛币 + 12   查看全部评分

使用道具

jmpamao 发表于 2014-10-21 15:44:08 |显示全部楼层 |坛友微信交流群

可以用 data.table, 避免排序了
  1. require(data.table)
  2. t=data.table(name=c("b","b","b","a","a"),fenshu=1:5)
  3. t[,cumsum(fenshu),by=name]
复制代码


已有 3 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
tiantanshu + 5 + 1 精彩帖子
李会超 + 24 r的包太丰富了
yywan0913 + 3 + 1 + 2 + 3 精彩帖子,好久不见

总评分: 论坛币 + 32  学术水平 + 1  热心指数 + 3  信用等级 + 3   查看全部评分

使用道具

tiantanshu 发表于 2015-9-25 09:48:15 |显示全部楼层 |坛友微信交流群
jmpamao 发表于 2014-10-21 15:44
可以用 data.table, 避免排序了
这个data.table包需要学习一下了,一直以为dplyr足够用了,现在看来,就这个功能,dplyr还不能做到

使用道具

boydreaming 发表于 2015-10-20 08:16:15 |显示全部楼层 |坛友微信交流群
请问假如结果只是要
name fenshu
b       6
a       9
就象数据库的select name,sum(fenshu) from t group by name呢?

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-16 17:21