我这样的R数据框包含不同时间的价格
product_1 product_2 product_3 product_4 product_5
t1 10 10 10 0 14
t2 20 0 50 15 15
t3 30 0 60 12 12
t4 40 14 15 5 0
在特定时间= t2之后,对于价格为0且至少一次的产品,在什么时候查询会给我所有包含价格的表格?基本上是基于行和列条件的数据帧的子集。
product_2 product_5
t1 10 14
t2 0 15
t3 0 12
t4 14 0
答案 0 :(得分:5)
阅读数据:
dd <- read.table(header=TRUE,text="
product_1 product_2 product_3 product_4 product_5
t1 10 10 10 0 14
t2 20 0 50 15 15
t3 30 0 60 12 12
t4 40 14 15 NA 0")
查找关键时间索引:
which.time <- which(rownames(dd)=="t2")
确定要保留的列的功能(也可以使用any(na.omit(tail(x,-which.time)==0))
; na.omit()
是必要的,以避免NA
以逻辑向量结束,指定要保留哪些列,这将导致稍微模糊undefined columns selected
错误......
keepvar <- function(x) {
any(na.omit(x[-(1:(which.time-1))])==0)
}
现在进行实际选择:
dd[sapply(dd,keepvar)]
答案 1 :(得分:2)
假设您的数据被称为df
df[,as.logical(apply(df, 2, function(x) sum(x[as.logical(cumsum(rownames(df)=="t2"))] == 0)))]
product_2 product_5
t1 10 14
t2 0 15
t3 0 12
t4 14 0