2013-01-15 53 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") 

(我不是伟大的正则表达式所以^可能是圆括号外的更好)