R 根据其他行中的值删除行条件

R 根据其他行中的值删除行条件,r,dataframe,R,Dataframe,我有一个类似于此的数据集 df1<-data.frame(ID = c(1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4), YEAR = c(1999, 2000, 2001, 2002, 1999, 2000, 2001, 2002, 1999, 2000, 2001, 2002, 1999, 2000, 2001, 2002), VALUE = c(1,2,3,3,3,2,5,6,2,3,4,4,2,1,2,1)) I

我有一个类似于此的数据集

df1<-data.frame(ID = c(1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4),
           YEAR = c(1999, 2000, 2001, 2002, 1999, 2000, 2001, 2002, 1999, 2000, 2001, 2002, 1999, 2000, 2001, 2002),
           VALUE = c(1,2,3,3,3,2,5,6,2,3,4,4,2,1,2,1))

   ID YEAR VALUE
1   1 1999     1
2   1 2000     2
3   1 2001     3
4   1 2002     4
5   2 1999     3
6   2 2000     2
7   2 2001     5
8   2 2002     6
9   3 1999     2
10  3 2000     3
11  3 2001     4
12  3 2002     4
13  4 1999     2
14  4 2000     1
15  4 2001     2
16  4 2002     1

df1这使用了
数据。帧
,可以扩展到
数据。表

for (i in unique(df1$ID))
{
    mask <- (df1[i == df1$ID,'VALUE'] > 2)
    mask <- cumsum(mask) == 0
    df1[i == df1$ID,'VALUE'][mask] <- 0 
}

这使用了
数据。框架
,可以扩展到
数据。表

for (i in unique(df1$ID))
{
    mask <- (df1[i == df1$ID,'VALUE'] > 2)
    mask <- cumsum(mask) == 0
    df1[i == df1$ID,'VALUE'][mask] <- 0 
}

这必须是重复的。你能给我一个链接到已经被问过的问题吗?我现在还没有找到它。这一定是一个副本。你能给我一个已经被问到的问题的链接吗?直到现在我才找到。谢谢你的回复!对于我提供的数据示例,这两种方法都很好,但我必须看到,我可能低估了这项任务的难度。实际上,我不仅需要删除小于2且大于3的值,而且数据集中还有NA,需要将其视为小于2且大于3的值。我将NA条目替换为0,因此此问题似乎已得到解决,但另一个问题仍然感谢您的回答!对于我提供的数据示例,这两种方法都很好,但我必须看到,我可能低估了这项任务的难度。实际上,我不仅需要删除小于2且大于3的值,而且数据集中还有NA,需要将其视为小于2且大于3的值。我将NA条目替换为0,因此此问题似乎已得到解决,但另一个问题仍然存在
transform(df1, VALUE = ave(VALUE, ID, FUN = function(x)
  ifelse(cumsum(x > 2) == 0, 0, x)
))