r中的唯一行,对列有约束

时间:2017-02-09 21:34:25

标签: r

我已经使用复制函数查看了一些示例。但是,它似乎不适用于我的问题。

这是一个例子,其中一个可能得到2个cols的随机数矩阵。

set.seed(56)
a <- cbind(sample(1:6,10,replace=TRUE),sample(1:5,10,replace=TRUE)) 
b <- a[order(a[,1]),]

     [,1] [,2]
[1,]    2    1
[2,]    4    3
[3,]    4    2
[4,]    5    4
[5,]    5    1
[6,]    6    5
[7,]    6    4

我希望第一个col是唯一的。但是,我希望第二个col值小于第一个col中的相邻值。

即。结果看起来像。

     [,1] [,2]
[1,]    2    1
[2,]    4    3
[3,]    5    4
[4,]    6    5

第一列中的值始终在变化,但第二列必须始终比第一列中的值小1。

2 个答案:

答案 0 :(得分:1)

首先获取第2列比第1列少1行的行:

result = a[a[, 2] == a[, 1] - 1, ]

然后删除重复:

result = result[!duplicated(result[, 1]), ]

答案 1 :(得分:1)

您可以先通过第一列中的唯一值split,然后从符合您要求的每个子组中提取第一行。

b = as.data.frame(b)
t(sapply(split(b, b$V1), function(x) x[which(x[,2] < x[,1])[1],]))