我是一个新手,正在尝试使用R编程语言。在满足筛选条件后,我想删除一组行中的特定行。
场景:对于每个组,在一行中有2个类型为“B”的情况下,删除该组之后的所有行。 "包含在数据集中"列显示了输出结果。
以下是我的示例输入:
GROUP TYPE Include in DataSet?
--------------------------------------------
1 A yes
1 A yes
1 B yes
1 B yes
1 B no
2 A yes
2 B yes
2 B yes
2 A no
2 B no
2 B no
DF = structure(list(GROUP = c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L,
2L, 2L), TYPE = c("A", "A", "B", "B", "B", "A", "B", "B", "A",
"B", "B"), inc = c("yes", "yes", "yes", "yes", "no", "yes", "yes",
"yes", "no", "no", "no")), .Names = c("GROUP", "TYPE", "inc"), row.names = c(NA,
-11L), class = "data.frame")
期望的输出结果:
GROUP TYPE Include in DataSet?
--------------------------------------------
1 A yes
1 A yes
1 B yes
1 B yes
2 A yes
2 B yes
2 B yes
我尝试编写一些代码,但由于分组问题而没有成功。
i=1
j=2
x <- allrows
for (i in x){
for(j in x){
if(i==j){
a$REMOVE=1
}
else{
a$REMOVE=2
}
}
}
df %>% group_by(GROUP)%>% filter(row_number()<= min(which(TYPE =='B' & lag(TYPE)=='B')))
。顺便说一下,如果从未出现过两个 B,则会出现警告(例如,请尝试min(which(FALSE))
),尽管我不确定是否有方法可以避免这种情况。 - Frank