如何选择列表中包含某个元素的前3行?

时间:2016-01-14 20:02:23

标签: r list indexing dataframe

在我当前的data.frame中,列#34; Names"是五个名字的列表。我想选择前3行" Names"包含某个名称。

当前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]

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

如果您想使用,可以使用:

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

或:

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

(如果您的数据不在data.table,则必须使用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

答案 1 :(得分:0)

一种选择是合并greplhead

创建一个类似的数据框:

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”的行,然后使用head选择前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