2017-02-08 4 views
-1

У меня есть большой набор данных следующим образом:Выбор пары нечетных четных значений в R

head(humic) 
SUERC.No GU.Number d13.C Age.(BP) error Batch.Number AMS.USED Year Type 

Sampletype 
400 32691  535 -28 3382.981 34.74480   1  S3 2011 2   ha 
401 32701  536 -28 3375.263 34.86087   1  S3 2011 2   ha 
402 32711  537 -28 3308.103 34.83100   1  S3 2011 2   ha 
403 32721  538 -28 3368.721 31.58641   1  S3 2011 2   ha 
404 32731  539 -28 3368.604 34.72326   1  S3 2011 2   ha 
405 32741  540 -28 3314.713 32.83147   1  S3 2011 2   ha 

tail(humic) 
    SUERC.No GU.Number d13.C Age.(BP) error Batch.Number AMS.USED Year Type Sampletype 
5445 70880  3962 -28.4 3390.458 29.12815   34  S4 2016 2   ha 
5446 70890  3963 -28.5 3358.861 37.14896   34  S4 2016 2   ha 
5447 70900  3964 -28.5 3363.626 26.71573   34  S4 2016 2   ha 
5448 70910  3965 -28.5 3408.907 26.69665   34  S4 2016 2   ha 
5449 70920  3966 -28.5 3348.463 29.01492   34  S4 2016 2   ha 
5450 70930  3967 -28.4 3375.247 26.78261   34  S4 2016 2   ha 

Я ищу создать переменную для идентификации пары четных и нечетных на основе переменной GU.Number. Эти числа идентифицируют дубликаты одного и того же объекта - имеют одинаковые значения d13.C.

Например, 535 - 536 537 - 538 3963-3964 3965-3966 представляют собой пары.

Обратите внимание, что столбец GU.Number не является последовательностью, некоторые номера отсутствуют.

+0

Лаборатория, которая собрала данные, идентифицирует нечетные, как оригинал, и следующее четное число как дубликат. – Fanni

ответ

1
even.rows <- which(!(humic$GU.Number %% 2)) 

has.pair <- rep(0,nrow(humic)) 

for(i in even.rows){ 
     has.pair[i] <- max((humic$GU.Number[i] + c(1,-1)) %in% humic$GU.Number) 
} 

# add as column of data 
humic$has.pair <- has.pair 

В столбце has.pair будет 1, если GU.Number даже и существует нечетное GU.Number один меньше или больше, чем один данной GU.Number. В противном случае это будет 0. В качестве однострочного:

humic$has.pair <- sapply(1:nrow(humic), 
      function(x) with(humic,(!(GU.Number[x] %% 2))*max((GU.Number[x] + c(1,-1)) %in% GU.Number)))