R 根据条件从zoo对象中删除行
我合并了两个不同的(不规则的)时间序列(merge.zoo()。看起来像:R 根据条件从zoo对象中删除行,r,zoo,R,Zoo,我合并了两个不同的(不规则的)时间序列(merge.zoo()。看起来像: quir schme 2006-01-01 01:15:00 725.24 4.64 2006-01-01 01:30:00 725.24 4.64 2006-01-01 01:45:00 0 4.64 2006-01-01 02:00:00 725.24 4.64 我要删除显示0个值的所有行,以接收: q
quir schme
2006-01-01 01:15:00 725.24 4.64
2006-01-01 01:30:00 725.24 4.64
2006-01-01 01:45:00 0 4.64
2006-01-01 02:00:00 725.24 4.64
我要删除显示0个值的所有行,以接收:
quir schme
2006-01-01 01:15:00 725.24 4.64
2006-01-01 01:30:00 725.24 4.64
2006-01-01 02:00:00 725.24 4.64
对于zoo对象,我没有找到合适的方法来实现这一点,因此我使用了非常不公平的方法将数据导出到*.csv,并在重新导入时处理行。
谁愿意以更优雅的方式分享
致意
Jochen您可以使用
子集
或[
library(zoo)
subset(z1, quir!=0)
# quir schme
#2006-01-01 01:15:00 725.24 4.64
#2006-01-01 01:30:00 725.24 4.64
#2006-01-01 02:00:00 725.24 4.64
如果任何列中存在0
值,则需要删除行
z1[!rowSums(z1==0),]
# quir schme
#2006-01-01 01:15:00 725.24 4.64
#2006-01-01 01:30:00 725.24 4.64
#2006-01-01 02:00:00 725.24 4.64
或者,正如@G.Grothendieck在评论中提到的,我们可以使用apply
循环行,并使用all
或any
获得逻辑索引。这里,!
表示否定。!!
双重否定(z1!=0
和.z1
相同)
数据
z1这些同样有效:z1[apply(z1!=0,1,all),]
,z1[apply(!!z1,1,all),]
,z1[!apply(z1==0,1,any),]
@G.Grothendieck你应该把它们作为答案写出来。这些答案似乎与当前的答案没有太大的不同,不能保证有一个全新的答案。
z1[apply(z1 != 0, 1, all), ]
z1[apply(!!z1, 1, all), ]
z1[!apply(z1 == 0, 1, any), ]
z1 <- structure(c(725.24, 725.24, 0, 725.24, 4.64, 4.64, 4.64, 4.64
), .Dim = c(4L, 2L), .Dimnames = list(NULL, c("quir", "schme"
)), index = structure(c(1136096100, 1136097000, 1136097900, 1136098800
), class = c("POSIXct", "POSIXt"), tzone = ""), class = "zoo")