我在R中有以下数据框
ID bay row tier
1 1 2 80
2 3 2 80
3 2 5 06
4 4 5 06
5 23 6 82
6 25 6 82
7 24 6 82
8 4 12 08
我想找到的是
row
和tier
值相等,并且同时bay
应该是odd
数字,并且两个相同row and tier
条目之间的间隔差应该是2
。例如
ID bay row tier
1 1 2 80
2 3 2 80
上面两行表明我的条件
row and tier
与bay
相同,因为奇数,并且two bay
numebers之间的差异是2
,我需要生成一个将为两行生成的标志,可以说1,2,3
唯一地标识了这对我想要的数据框是
ID bay row tier flag
1 1 2 80 1
2 3 2 80 1
3 2 5 06 NA
4 4 5 06 NA
5 23 6 82 2
6 25 6 82 2
7 24 6 82 NA
8 4 12 08 NA
我如何在R中做到这一点?
最佳答案
您可以按以下方式获取子集,
ind <- duplicated(df[c('row', 'tier')]) & df$bay%%2 == 1|
duplicated(df[c('row', 'tier')], fromLast = TRUE) & df$bay%%2 == 1
df1 <- df[ind,]
df1 <- df1[!!with(df1, ave(bay, new, FUN = function(i) c(TRUE, diff(i) == 2))),]
df1
这使
要获得标志,
df$flag <- cumsum(c(1, diff(which(ind)) != 1))[match(df$ID, df1$ID)]
df
这使,