从数据框中仅删除零值的时间序列

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包解决了一个非常好的解决方案.

R有效地从1个数据帧中的多个时间序列的开始和结束中删除缺失值

Mat*_*wle 5

如果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.