Regex 条件strsplit

Regex 条件strsplit,regex,r,Regex,R,我有一个数据框,其中一列包含一组名称。我想拆分一部分列名,具体操作如下: DF$newname <- sapply(strsplit(as.character(DF$oldname), "_"), '[', 5) 第二种格式是$oldname,如下所示 xxx_xxx_xxx_xxx_xxx_name_xx (name is in sixth position) 我想我可以在函数中使用ifelse命令,但在以下代码中遇到了一些问题: namesplit = function(df){

我有一个数据框,其中一列包含一组名称。我想拆分一部分列名,具体操作如下:

DF$newname <- sapply(strsplit(as.character(DF$oldname), "_"), '[', 5)
第二种格式是
$oldname
,如下所示

xxx_xxx_xxx_xxx_xxx_name_xx  (name is in sixth position)
我想我可以在函数中使用
ifelse
命令,但在以下代码中遇到了一些问题:

namesplit = function(df){ 
  x <- strsplit(as.character(df$oldname), "_"), '[', 5)
  y <- strsplit(as.character(df$oldname), "_"), '[', 6)
  ifelse(is.character(x),x,y) }
DF$newname <- sapply(DF,namesplit)
namesplit=function(df){

使用
gsub

names <- c('xxx_xxx_xxx_xxx_xxx_name1_xx', 'xxx_xxx_xxx_xxx_name2_xx')
gsub("^.*_([[:alnum:]]+)_.*$", "\\1", names)


[1] "name1" "name2"

name您可以使用
gsub

names <- c('xxx_xxx_xxx_xxx_xxx_name1_xx', 'xxx_xxx_xxx_xxx_name2_xx')
gsub("^.*_([[:alnum:]]+)_.*$", "\\1", names)


[1] "name1" "name2"

names如果名称是倒数第二部分,那么这个如何:

x <- c("xxx_xxx_xxx_xxx_name_xx", "xxx_xxx_xxx_xxx_xxx_name_xx")


namesplit = function(x){
x <- strsplit(as.character(x), "_")
sapply(x, function(x) x[length(x)-1])
}

x如果名称是倒数第二部分,那么这一部分如何:

x <- c("xxx_xxx_xxx_xxx_name_xx", "xxx_xxx_xxx_xxx_xxx_name_xx")


namesplit = function(x){
x <- strsplit(as.character(x), "_")
sapply(x, function(x) x[length(x)-1])
}

x我喜欢这种方法,只是对于名称的子集,名称有多个单词,这些单词之间用''.'字符分隔。因此,从末尾开始计数将不一致。不过,谢谢!@zach,那么当您使用'.'字符分割时,您希望如何分割它呢也会分割你的名字吗?名字是化学名字。名字的第一部分是最重要的。其他部分不重要,但会影响倒计时。这个数据集是给我的,所以将来我会用不同的字符来分隔化学名字。一个名字可能是“酪氨酸”,另一个可能是另一个“Proline_Alpha”。我只关心主要名称。如果问题有误导性,我很抱歉。我喜欢这种方法,只是对于名称的子集,名称有多个单词,这些单词之间用“.”分隔_“'字符。所以从末尾开始计算会不一致。不过谢谢你!@zach,那么当你用“\ux”拆分时,你希望如何拆分它?”也会分割你的名字吗?名字是化学名字。名字的第一部分是最重要的。其他部分不重要,但会影响倒计时。这个数据集是给我的,所以将来我会用不同的字符来分隔化学名字。一个名字可能是“酪氨酸”,另一个可能是另一个“Proline_Alpha”。我只关心主要名称。如果问题有误导性,我很抱歉。谢谢Ramnath。在他的例子中,我将名称简化了一点(它们来自混合了字符和数字数据的FASTA标头。当我将此方法应用于实际数据集时,它并不总是应用真值。我更希望包含一个“ifelse”,以便我可以将其扩展到可能具有其他格式的未来数据集。但是……我认为你是对的。我应该能够调整你的解决方案如果你正在解析FASTA头,请查看这个博客上的代码,它使用
C
R
来完成这项工作。谢谢你Ramnath。在他的例子中,我简化了一些名称(它们来自混合了字符和数字数据的FASTA标头。当我将此方法应用于实际数据集时,它并不总是应用真值。我更希望包含一个“ifelse”,以便我可以将其扩展到可能具有其他格式的未来数据集。但是……我认为你是对的。我应该能够调整你的解决方案如果你正在解析FASTA头,请查看本博客上的代码,它使用
C
R
来完成这项工作。