siz*_*ght 4 r time-series dataframe data.table
我有一个数据框,其中包含由uniquer id识别的多个时间序列.我想删除任何只有0值的时间序列.
数据框如下所示,
id date value
AAA 2010/01/01 9
AAA 2010/01/02 10
AAA 2010/01/03 8
AAA 2010/01/04 4
AAA 2010/01/05 12
B 2010/01/01 0
B 2010/01/02 0
B 2010/01/03 0
B 2010/01/04 0
B 2010/01/05 0
CCC 2010/01/01 45
CCC 2010/01/02 46
CCC 2010/01/03 0
CCC 2010/01/04 0
CCC 2010/01/05 40
Run Code Online (Sandbox Code Playgroud)
我想要删除任何只有0值的时间序列,以便数据框看起来如下,
id date value
AAA 2010/01/01 9
AAA 2010/01/02 10
AAA 2010/01/03 8
AAA 2010/01/04 4
AAA 2010/01/05 12
CCC 2010/01/01 45
CCC 2010/01/02 46
CCC 2010/01/03 0
CCC 2010/01/04 0
CCC 2010/01/05 40
Run Code Online (Sandbox Code Playgroud)
这是对前一个问题的跟进,使用data.tables包解决了一个非常好的解决方案.
如果dat是a data.table,那么这很容易写和读:
dat[,.SD[any(value!=0)],by=id]
Run Code Online (Sandbox Code Playgroud)
.SD代表数据子集. 这个答案.SD很好地解释了.
接受Gabor的好用ave,但不重复相同的变量名(DF)三次,如果你有很多长或类似的变量名,这可能是拼写错误的来源,试试:
dat[ ave(value!=0,id,FUN=any) ]
Run Code Online (Sandbox Code Playgroud)
这两者之间的速度差异可能取决于若干因素,包括:i)组的数量ii)每组的大小和iii)真实的列数dat.