我有一个名为日期的数据框,有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列中没有重复项,我可以这样做,但我正在努力解决重复问题。
答案 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)), ]