我合并了2个不同的(不规则的)时间序列( 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值的行,以便接收:
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
我没有为动物园对象找到合适的方法,所以我使用非常不雅的方式将数据导出到* .csv并在重新导入时处理行。 谁愿意分享更优雅的方式?
祝你好运 Jochen
答案 0 :(得分:2)
您可以使用subset
或[
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[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")