在我当前的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]
非常感谢任何帮助。
答案 0 :(得分:1)
如果您想使用data.table,可以使用:
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)
一种选择是合并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”的行,然后使用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