2012-06-08 39 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。感謝您對協議的支持 –

相關問題