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)
))