全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
1578 3
2012-08-05
如题,R的code如下
Ind.all=X$Number
n.all=length(Ind.all)

Day.Ind=Ind.all[1]

for(i in 2:n.all)
   {if(Ind.all[i]>Ind.all[i-1]){Day.Ind=c(Day.Ind,Ind.all[i])}}

nd=length(Day.Ind)


其中Number代表的是交易的天,比如在第一天内有500笔交易,那么这500笔交易的Number都是1,以此类推。每天的交易的笔数不一定相同,可能第2天有700笔交易等等。。。
我的问题是,现在想去除每天 第一笔 交易,code怎么编写呢,需要一个循环吗, 谢谢啦

二维码

扫码加我 拉你入群

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

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

全部回复
2012-8-5 22:23:04
没有确切理解你提的问题。现在假设一下。
以一个简单数据表为例,假定数据表x的形式如下,其中number为交易日的标识变量,xx为交易量,要删除每一天的第一笔记录,即删除1、4、8号记录:

> x
  number xx
1      1 22
2      1 47
3      1 31
4      2 15
5      2 33
6      2 48
7      2 18
8      3 37
9      3 15

采用非循环的方式实现,关键是要找出每天第一笔记录的下标。方法如下:
> a1=as.numeric(table(x$number))               # 按天统计记录数
> cidx=cumsum(a1)-a1+1                      # 求出每天第一笔交易的下标
> x.out=x[-(cumsum(a1)-a1+1),]                 # 按下标删除x表中相应记录

输出结果为x.out
> x.out
  number xx
2      1 47
3      1 31
5      2 33
6      2 48
7      2 18
9      3 15

相比之下,采用循环的方式更容易实现,不过效率要低一些。
二维码

扫码加我 拉你入群

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

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

2012-8-7 08:05:32
   number  x
1       1  1
2       1  2
3       1  3
4       2  4
5       2  5
6       2  6
7       3  7
8       3  8
9       4  9
10      5 10
11      5 11
12      6 12
13      7 13
> as.vector(unlist(tapply(x,number, function(x) x[-1])))
[1]  2  3  5  6  8 11
二维码

扫码加我 拉你入群

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

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

2012-8-7 08:08:07
或者先得到所以第一个的位置,然后删掉
> index<-tapply(1:length(number),number, function(x) x[1])
> x[-index]
[1]  2  3  5  6  8 11
二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群