подкадр данных - PullRequest
       17

подкадр данных

3 голосов
/ 18 марта 2011

Думаю, у меня есть простой вопрос.В моем кадре данных я хотел бы сделать подмножество, в котором столбец Quality_score равен: Perfect, Perfect *, Perfect *, Good, Good ** и Good ***

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

>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)

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

Лизанна

Ответы [ 2 ]

2 голосов
/ 18 марта 2011

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

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

РЕДАКТИРОВАНИЕ: на основе любезного комментария @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
1 голос
/ 18 марта 2011

Одна вещь, которая работает, это grepl, она ищет шаблон в строках и возвращает логическое указание, есть ли он там.Вы также можете использовать оператор | в строке, чтобы указать ИЛИ, и 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

РЕДАКТИРОВАТЬ: теперь я вижу, что чувствительность к регистру не была проблемой, благодаря дислексии!Вы можете упростить до:

subset(completefile,grepl("Good|Perfect",Quality_score))
...