2012-06-08 40 views
2

我一直在R中寻找一个命令,这将允许我只将字段中的一部分进行分组,而不是整个字段。我想出了一个可行的工作,但它有点繁琐笨拙。下面是测试数据帧在R寻找一个更好的方法来组合一个字段

name.list = data.frame(Name=c("jeff banks", "phil lender", "jeff brooks", 
"barbara holcomb", "danny jefferson"),Age=c(27,34,25,45,32)) 
name.list 

这是输出

   Name Age 
1  jeff banks 27 
2  phil lender 34 
3  jeff brooks 25 
4 barbara holcomb 45 
5 danny jefferson 32 

我想确定有“杰夫”在他们 这样我就可以使用,作为一个组或所有名称entires分配一个虚拟变量。换句话说,追加 我的数据帧是这样的:

   Name Age Jeff.field 
1  jeff banks 27  1 
2  phil lender 34  0 
3  jeff brooks 25  1 
4 barbara holcomb 45  0 
5 danny jefferson 32  1 

我想出了这个解决方案,但它是不是很优雅

name.list2=name.list[grep("jeff",name.list$Name),] 
name.list2$jeff.field=rep(1,dim(name.list2)[1]) 

name.list3=name.list[-grep("jeff",name.list$Name),] 
name.list3$jeff.field=rep(0,dim(name.list3)[1]) 

name.list4=rbind(name.list2,name.list3) 
name.list4 

这让我这个数据帧

​​

有谁知道更基本的方法?

回答

2

在这里你去:

name.list$jeff.field <- grepl("jeff", name.list$Name) 
name.list[order(name.list$jeff.field), ] 

      Name Age jeff.field 
2  phil lender 34  FALSE 
4 barbara holcomb 45  FALSE 
1  jeff banks 27  TRUE 
3  jeff brooks 25  TRUE 
5 danny jefferson 32  TRUE 
+0

圣牛。我试过这个,它是soclose: 子集(name.list,grepl(“jeff”,name.list $ Name)) 我没想过要删除子集命令。 非常感谢! –

+0

不要忘记给Andrie他的复选标记。如果你想要1/0,那么在'grepl'调用周围包装'as.numeric'。 –

+0

很酷。点击复选标记。第一次使用stackoverflow。感谢您对协议的支持 –

相关问题