2011-03-18 4 views
3

У меня есть простой вопрос, который я думаю. В моем dataframe я хотел бы сделать подмножество, где столбец Quality_score равно: Совершенный, совершенный * , совершенный * , хороший, ** и *** Хорошоподзаголовок dataframe

Это в моем решении сейчас:

>Quality_scoreComplete <- subset(completefile,Quality_score == "Perfect" | Quality_score=="Perfect***" | Quality_score=="Perfect****" | Quality_score=="Good" | Quality_score=="Good***" | Quality_score=="Good****") 

Есть ли способ упростить этот метод? Как:

methods<-c('Perfect', 'Perfect***', 'Perfect****', 'Good', 'Good***','Good***') 
Quality_scoreComplete <- subset(completefile,Quality_score==methods) 

Спасибо всем,

Lisanne

ответ

1

Одна вещь, которая работает, grepl, это поиск по шаблону в строках и возвращает логическое, указывающий, если он есть. Вы можете использовать оператор | в строке, а указать OR, и ignore.case игнорировать чувствительность к регистру:

methods<-c('Perfect', 'Perfect*', 'Perfect*', 'Good', 'Good','Good*') 

completefile <- data.frame(Quality_score = c(methods, "bad", "terrible", "abbysmal"), foo = 1) 

subset(completefile,grepl("good|perfect",Quality_score,ignore.case=TRUE)) 
1  Perfect 1 
2  Perfect* 1 
3  Perfect* 1 
4   Good 1 
5   Good 1 
6   Good* 1 

EDIT: Теперь я вижу, что чувствительность к регистру не была проблемой, благодаря дислексии! Вы могли бы упростить потом:

subset(completefile,grepl("Good|Perfect",Quality_score)) 
+0

О, я думаю, что есть проблема. Я реализую R в другой программе, но эта программа не regonize | любые другие варианты? – Samantha

+0

не распознает, что идентификатор неправильно оценивает вызов grepl? Или вы имеете в виду, что вы просто не можете ввести этот символ? –

2

Вам не нужно даже subset, проверьте: ?"["

Quality_scoreComplete <- completefile[completefile$Quality_score %in% methods,] 

EDITED: основанного на любезном комментарии @Sacha Epskamp: == в выражении дает неправильные результаты, поэтому исправил его выше до %in%. Благодаря!

Пример задачи:

> x <- c(17, 19) 
> cars[cars$speed==x,] 
    speed dist 
29 17 32 
31 17 50 
36 19 36 
38 19 68 
> cars[cars$speed %in% x,] 
    speed dist 
29 17 32 
30 17 40 
31 17 50 
36 19 36 
37 19 46 
38 19 68 
+0

Это будет работать, если вы замените '==' на '% in%' –

+0

@Sacha Epskamp: верно, спасибо! – daroczig

+0

Спасибо Sascha! Это работает для меня! – Samantha