有条件地从data.frame中删除重复项

有条件地从data.frame中删除重复项,r,dataframe,subset,R,Dataframe,Subset,我正在试图找出如何根据变量s的重复值对我的数据集进行子集划分,同时还要考虑与行关联的id 假设我的数据集是: dat <- read.table(text = " id s 1 2 1 2 1 1 1 3 1 3 1 3

我正在试图找出如何根据变量
s
的重复值对我的数据集进行子集划分,同时还要考虑与行关联的
id

假设我的数据集是:

dat <- read.table(text = "
        id     s          
        1      2     
        1      2     
        1      1      
        1      3     
        1      3     
        1      3     
        2      3     
        2      3     
        3      2     
        3      2", 
header=TRUE)
我已经尝试过使用
duplicated()
which()
来使用
subset()
,但我哪儿也不去。主要问题是隔离
s=3
“块”的第一行是不够的,因为在某些情况下(如
id=1
id=2
之间),3在一个id和另一个id之间重叠。。您会采取哪种策略?

如下:

subset(dat, s != 3 | s == 3 & !duplicated(dat)) 
#    id s
# 1   1 2
# 2   1 2
# 3   1 1
# 4   1 3
# 7   2 3
# 9   3 2
# 10  3 2
请注意,使用
子集
可能会有危险(请参阅),因此较长但更安全的版本为:

        id     s          
        1      2     
        1      2     
        1      1      
        1      3         
        2      3         
        3      2     
        3      2
dat[dat$s != 3 | dat$s == 3 & !duplicated(dat), ]

谢谢!同样对于链接对不起,我不知道,我必须查看您的数据。id=1(其中s=2)和id=3(其中s=2)中也有重复项,您想保留这些还是删除它们?是的,我想保留它们,谢谢