R - 删除第1列中具有负值的所有行,在另一列中具有负值

时间:2015-06-08 14:46:00

标签: r

我有一个名为日期的数据框,有4列(数字,A,B和差异)。 Number是带参考编号的列。 A和B都是日期列。 Diff是一个列,其中包含A和B之间的天数。我在列号中有重复项,如果列差异包含负数,则要删除所有数值。请参阅以下示例:

Number            A                B                Diff
  1            2015-06-08      2015-06-06            -2
  1            2015-06-08      2015-06-06            -2
  2            2015-06-01      2015-05-25            -7
  2            2015-06-01      2015-06-06             5 
  3            2015-06-04      2015-06-07             3 
  3            2015-06-04      2015-06-06             2        

我的结果应该是数字3的最后2行。数字1的两行都会被删除,因为存在负差异,并且数字2的两行都被删除,因为数字2的第一行具有负值。

如果Number列中没有重复项,我可以这样做,但我正在努力解决重复问题。

2 个答案:

答案 0 :(得分:4)

尝试

library(data.table)
setDT(df1)[, if(!any(Diff < 0)) .SD, by = Number]
#   Number          A          B Diff
#1:      3 2015-06-04 2015-06-07    3
#2:      3 2015-06-04 2015-06-06    2

或使用dplyr

library(dplyr)
df1 %>%
      group_by(Number) %>%
      filter(all(Diff>=0))

答案 1 :(得分:2)

基础R可能性

df[with(df, ave(Diff, Number, FUN = function(x) any(x < 0))) == 0,]
#   Number          A          B Diff
# 5      3 2015-06-04 2015-06-07    3
# 6      3 2015-06-04 2015-06-06    2

或更短版本(每条评论)

df[with(df, ave(Diff >= 0, Number, FUN = all)), ]