2016-01-14 2 views
0

В моем текущем data.frame столбец «Имена» представляет собой список из пяти имен. Я хотел бы выбрать первые 3 строки, где «Имена» содержат определенное имя.Как выбрать первые 3 строки, содержащие определенный элемент в списке в R?

Текущий data.frame (DF):

Names  Hours Gains 
A,B,C,D,E 12  8 
C,R,A,D,B 3  4 
Z,W,D,B,A 6  3 
T,R,H,Z,B 11  3 
J,A,C,B,D 8  0 
R,E,T,C,Q 2  -2 
B,C,D,J,A 1  -4 

Желаемая Выход для имен, содержащих "C"

Names  Hours Gains 
A,B,C,D,E 12  8 
C,R,A,D,B 3  4 
J,A,C,B,D 8  0 

Я пробовал:

library(data.table) 
DF[Names == "C"][, .SD[C(1:3, .N)], by = Gains] 

Любая помощь будет значительно оценили.

ответ

1

Если вы хотите использовать data.table, вы можете использовать:

setDT(mydf)[grepl("C", Names), .SD[1:3]] 

или:

setDT(mydf)[grepl("C", Names), head(.SD, 3)] 

(если данные не в data.table еще, вы должны преобразовать dataframe с setDT())

оба дают:

 Names Hours Gains 
1: A,B,C,D,E 12  8 
2: C,R,A,D,B  3  4 
3: J,A,C,B,D  8  0 
+0

Это отлично работает! Спасибо. – Dre

0

Одним из вариантов является сочетание grepl и head

Создать подобный кадр данных:

df <- data.frame(Names=c("A,B,C,D,E","C,R,A,D,B","Z,W,D,B,A","T,R,H,Z,B","J,A,C,B,D","R,E,T,C,Q","B,C,D,J,A"), Hours=c(12,3,6,11,8,2,1), Gains=c(8,4,3,3,0,-2,-4)) 

затем использовать grepl для идентификации строк с именами, содержащими «C», а затем использовать головку для выбора первой 3 :

head(df[grepl(pattern = "C",x = df$Names),],3) 

     Names Hours Gains 
1 A,B,C,D,E 12  8 
2 C,R,A,D,B  3  4 
5 J,A,C,B,D  8  0 
+1

Или: 'df [grepl (" C ", df $ Names),] [1: 3,]' – Jaap

+0

i ssue с ​​этим методом - это фактический кадр данных, с которым я работаю, содержит более 100 строк и растет еженедельно. Поэтому создание подобной структуры данных не похоже на наиболее эффективный подход. – Dre

+0

Я создал фрейм данных как пример для тех, кто хочет воспроизвести его, не набрав его сами. Если у вас уже есть кадр данных, вам не нужно создавать другой. Он будет работать с любым количеством строк, которые у вас есть. –

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

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