在R中分割字符串并从列表中提取信息

3

我有以下数据的行名:

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

我可以使用以下命令来拆分这些行名称:
strsplit(rownames(my_data),split= "\\.")

并获取列表:
[[1]]
[1] "column_01" "1"   

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

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

...

但是我只想要第一部分的字符,完全舍弃第二部分,就像这样:
column_01
column_01
column_01
column_02
column_02

我已经用尽了所有的把信息分割出来的技巧。我试过一些用unlist()和as.data.frame()的选项,但是没有成功。或者有更简单的方法可以分割字符串吗?我不想使用as.character(substring(rownames(my_data),1,9)),因为"."的位置可能会改变(虽然在这个示例中它可以正常工作)。


另一种方法是使用reshape2包中的colsplit函数。 - Brian Diggs
2个回答

8

您可以使用映射[来获取第一个元素:

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

...或者更好的方法是使用正则表达式:

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

查找所有(点字符、某些字符、字符串结尾)的匹配项,并用空字符串替换。

0

由于我喜欢 stringr 包,所以我想分享一下:

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

我不太擅长正则表达式,所以^最好放在括号外面。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接