2016-04-15 1 views
1

У меня есть кадр данных, который содержит столбец, содержащий коды, разделенные пробелом. И я хочу искать эти идентификаторы, применяя «<» или «>» и т. Д. Арифметические операторы.Найти числовой шаблон в символьном векторе, содержащий числовые цифры, разделенные пробелом

Входной кадр данных:

df <- data.frame(Id=c(101, 102,103), Codes=c("1 2 3", "2 4 5", "4 5")) 

Я пытался найти идентификаторы, которые имеют с кодом выше 3. , так что я могу получить 102 и 103 в качестве вывода.

df[df$Codes > "3", ] 

, но это дает мне 103 идентификатора. что мне не хватает ???

+2

на данный момент, вы сравнения строк и , в алфавитном порядке строки «4 5» являются единственными после строки «3». – Cath

ответ

2

Мы можем попробовать

df[sapply(strsplit(as.character(df$Codes), "\\s+"), function(x) any(as.numeric(x)>3)), ] 
# Id Codes 
#2 102 2 4 5 
#3 103 4 5 

Или используйте grep

df[grep("[4-9]", df$Codes),] 
# Id Codes 
#2 102 2 4 5 
#3 103 4 5 

Если нам нужны только "Id"

df$Id[grep("[4-9]", df$Codes)] 
#[1] 102 103 
+0

Это действительно здорово. Спасибо @akrun. Но у меня есть один запрос, не могу мы делаем это простой способ просто так же, как% как% operater делает: DF $ Коды% как% '3' же путь DF $ Коды < '3' –

+0

@indra_patil It это строка. Итак, один простой способ - использовать 'grep' – akrun

Смежные вопросы