2015-09-11 2 views
0

У меня есть фактор с несколькими уровнями, и я пытаюсь получить количество уровней, в которых уровни факторов содержат заданную строку.Подсчитайте количество уровней факторов, соответствующих строке символов в R

Учитывая этот фактор:

exdata <- factor(c("Test1","Test2","Sample1","Sample2","Test1","Test2","Sample3")) 

Я хочу, чтобы найти число уровней в exdata, содержащих «образец» или «Тест».

Мое решение до сих пор было использовать nlevels, droplevels и grep:

nlevels(droplevels(exdata[grep("Test",exdata)])) 
# Correct/intended answer is 2 
nlevels(droplevels(exdata[grep("Sample",exdata)])) 
# Correct/intended answer is 3 

Есть более краткий способ сделать это?

ответ

2

Используйте levels()

levels(exdata) 
# [1] "Sample1" "Sample2" "Sample3" "Test1" "Test2" 

Таким образом, вы можете сделать две отдельные вызовы ...

length(grep("Sample", levels(exdata), fixed = TRUE)) 
# [1] 3 
length(grep("Test", levels(exdata), fixed = TRUE)) 
# [1] 2 

Или в один присест ...

f <- function(x) length(grep(x, levels(exdata), fixed = TRUE)) 
sapply(c("Sample", "Test"), f) 
# Sample Test 
#  3  2 
+0

Спасибо! Я поеду с этим, а не с вашим комментарием, в интересах удобочитаемости для тех, кто в моем проекте менее разбирается в регулярном выражении: P Я соглашусь, когда откроется окно. – dd3

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

  • Нет связанных вопросов^_^