【发布时间】:2015-11-20 18:05:29
【问题描述】:
我有一个数据集 df:
df=data.frame(rbind(c("A",1,1,"abc"),
c("B",0,0,"def"),
c("C",0,1,"hep"),
c("A",1,1,"hit"),
c("B",0,1,"occ"),
c("C",1,1,"tem"),
c("A",1,1,"twi"),
c("B",1,1,"twa"),
c("C",1,1,"mit"),
c("A",1,1,"mot"),
c("C",1,1,"mot"),
c("B",1,1,"mjak")))
names(df)=c("id","v1","v2","check")
我想在 DF 中创建一个 id 子集,其中包含“check”列中“ch.vars”向量中包含的值。
ch.vars=c("abc","hit","mot","twi","mjak")
如果一个 id 包含除 "ch.vars" 中给出的值之外的任何值,它们将从数据集中排除。例如,id B 和 C 在检查列中包含其他值,因此它们将被排除在子集。
这是我迄今为止尝试过的:
df$check.var=ifelse(df$check %in% ch.vars,1,0)
df=arrange(df,id)
st1=filter(df,check.var==0)
st1=as.character(unique(st1$id))
df2=df[!df$id %in% st1,]
> df2
id v1 v2 check check.var
1 A 1 1 abc 1
2 A 1 1 hit 1
3 A 1 1 twi 1
4 A 1 1 mot 1
这可行,但我想知道是否有更有效的方法来做到这一点,即以更少的步骤实现结果。谢谢!
【问题讨论】: