Проверка нескольких условий - PullRequest
1 голос
/ 04 июня 2011

У меня есть фрейм данных, и я хочу знать, присутствует ли определенная строка.Я хочу знать, содержит ли какое-либо из значений в df [, 1] что-нибудь из inscompany.

df = data.frame(company=c("KMart", "Shelter"), var2=c(5,7))
if( df[,1] == inscompany ) print("YES")
inscompany <- c("21st Century Auto Insurance", "AAA Auto Insurance", "AARP Auto Insurance",
        "Allstate Auto Insurance", "American Family Auto Insurance", "Eastwood Auto Insurance",
        "Erie Auto Insurance", "Farmers Auto Insurance", "GMAC Auto Insurance", "Hartford Auto Insurance",
        "Infinity Auto Insurance", "Mercury Auto Insurance", "Nationwide Auto Insurance", "Progressive Auto Insurance",
        "Shelter Insurance Company", "Titan Auto Insurance", "Travelers Auto Insurance", "USAA Auto Insurance")

Я получаю сообщение об ошибке, что он может проверить только первое значение inscompany для df [, 1].

Помогите!

Ответы [ 2 ]

6 голосов
/ 04 июня 2011

Вы хотите %in%. Вот экзамен:

R> chk <- c("A", "B", "Z")    # some text
R> chk %in% LETTERS[1:13]     # check for presence in first half of alphabet
[1]  TRUE  TRUE FALSE
R> 

Связана функция match(), подробности см. На странице справки.

1 голос
/ 04 июня 2011

Я думаю, match и %in% не будут работать для частичного соответствия. grepl дает логический (TRUE / FALSE) результат в зависимости от того, содержится ли целевая строка или нет; Я использовал ^, чтобы установить соответствие только в начале строки (вам это может не понадобиться). any и sapply необходимы для масштабирования до совпадения «многие ко многим». Если вы просто хотите узнать, совпадает ли любая строк, вам понадобится еще одна any вокруг всего этого.

 sapply(df$company,function(x) any(grepl(paste("^",x,sep=""),inscompany)))
[1] FALSE  TRUE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...