2013-01-15 72 views
3

提取信息,我有我的數據如下行名稱:分割字符串,並從列表

column_01.1 
column_01.2 
column_01.3 
column_02.1 
column_02.2 

我可以用下面的命令拆分這些rownames:

strsplit(rownames(my_data),split= "\\.") 

,並獲得名單:

[[1]] 
[1] "column_01" "1" 

[[2]] 
[1] "column_01" "2" 

[[3]] 
[1] "column_01" "3" 

... 

但是因爲我想從第一部分中刪除字符並完全丟棄第二部分, s:

column_01 
column_01 
column_01 
column_02 
column_02 

我已經用盡技巧來只提取這部分信息。我嘗試了一些unlist()和as.data.frame()的選項,但沒有運氣。還是有更簡單的方法來分割字符串?我不想使用as.character(substring(rownames(my_data),1,9))作爲「。」的位置。可以改變(雖然它適用於這個例子)。

+0

另一種方法是使用在'reshape2'包'colsplit'功能。 –

回答

8

可以映射[獲得的第一要素:

sapply(strsplit(rownames(my_data),split= "\\."),'[',1) 

...或(更好)使用正則表達式:

gsub('\\..*$','',rownames(my_data)) 

(翻譯:發現(點字符的所有比賽,東西,結束的字符串),並用空字符串替換)

0

因爲我喜歡stringr包,我想我會拋出:

str_replace(rownames(my_data), "(^column_.+)\\.\\d+", "\\1") 

(我不是偉大的正則表達式所以^可能是圓括號外的更好)