基于列和行的子集

时间:2015-11-14 20:40:42

标签: r dataframe

我这样的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

2 个答案:

答案 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