【问题标题】:Filtering a dataframe in R在 R 中过滤数据框
【发布时间】:2010-09-06 13:51:35
【问题描述】:

我有以下数据框 (df)

 start     end
1    14379   32094
2   151884  174367
3   438422  449382
4   618123  621256
5   698271  714321
6   973394  975857
7   980508  982372
8   994539  994661
9  1055151 1058824
.   .       .
.   .       .
.   .       .

还有一个带有 boolean 值的长布尔向量 (vec)。

我想过滤掉df 中在vec 的相应位置中至少包含一个TRUE 值的所有范围。

换句话说,如果!any(vec[x:y]),将输出带有start=xend=y的行。

关于如何实现这一点的任何想法?

【问题讨论】:

  • @hadley 怎么是重复的?我使用了相同的数据框,但问题不同(过滤数据框与向数据框添加列)。

标签: r filter dataframe


【解决方案1】:

这与以下问题相同: Adding a column to a dataframe in R 所以它有相同的答案...使用apply,但使用any而不是mean...

> ranges <- apply(DF,1,function(row) !any(vec[ row[1]:row[2] ]))
> DF[ranges,]

【讨论】:

    【解决方案2】:

    我已阅读您关于此主题的其他帖子,如果您想通过plyr 实现此目的, 试试这个:

    new.df <- adply(df, .margins=1, function(x){if(!any(vec[x$start:x$end])) return(x)})
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-12
      • 2017-01-03
      • 1970-01-01
      • 2014-02-28
      • 2017-12-30
      • 2010-10-03
      • 1970-01-01
      • 2022-10-07
      相关资源
      最近更新 更多