Сопоставьте векторы на подмножестве цифр в каждом элементе R

Я пытаюсь увидеть, совпадают ли элементы в векторе с первыми четырьмя цифрами элементов во втором векторе (они являются вложенными идентификаторами), и я не совсем уверен, как выполнить совпадение. Например:

X     Y 
1111  111120
1111  890933
2222  780777
2222  222247

Я хотел бы создать код, чтобы сказать мне, соответствуют ли первые четыре цифры элемента i в векторе y цифрам в элементе i в векторе x. Расширяя пример, я надеюсь увидеть:

True
False
False
True

Спасибо за любые мысли.


person coding_heart    schedule 22.10.2013    source источник


Ответы (2)


Использование apply для перебора строк и использование grepl будет работать...

apply( df , 1 , function(x) grepl( x[1] , x[2] ) )
#[1]  TRUE FALSE FALSE  TRUE
person Simon O'Hanlon    schedule 22.10.2013
comment
Чтобы соответствовать первым четырем цифрам, возможно, grepl(paste0("^",x[1]),x[2]) - person Blue Magister; 22.10.2013

Предположим, что ваш data.frame равен df, и использование substr поможет.

> df$X==as.numeric(substr(df$Y, start=1, stop=4))
[1]  TRUE FALSE FALSE  TRUE

Собираем все вместе в новый data.frame:

> transform(df, Z=df$X==as.numeric(substr(df$Y, start=1, stop=4)))
     X      Y     Z
1 1111 111120  TRUE
2 1111 890933 FALSE
3 2222 780777 FALSE
4 2222 222247  TRUE

Взгляните на ?substr для получения дополнительной информации о том, как это работает.

person Jilber Urbina    schedule 22.10.2013