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

在R中拆分字符串并从列表中提取信息,r,R,我的数据中有以下行名称: 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.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()尝试了一些选项,但没有成功。还是有更简单的方法来分割字符串?我不想使用
作为.character(子字符串(rownames(my_data),1,9))
作为“.”可以更改的位置(在本例中可以更改)。

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

sapply(strsplit(rownames(my_data),split= "\\."),'[',1)
…或(更好)使用正则表达式:

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

(翻译:查找(点字符、某物、字符串结尾)的所有匹配项,并替换为空字符串)

因为我喜欢
stringr
包,我想我会把它扔到那里:

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

(我对正则表达式不太在行,因此括号外的
^
可能更好)

另一种方法是在
restrape2
包中使用
colsplit
函数。