strsplit 数据框中第一列的中间模式

strsplit intermediate pattern in first column in a data frame

我有一个数据框,我想将第一列拆分为两列,但单独的模式与其他模式类似,我只想拆分位于数字 4 的模式。

data frame:
TCGA-TS-A7P1-01A-41D-A39S-05     0.8637304    
TCGA-NQ-A57I-01A-11D-A34E-05     0.7812147    
TCGA-3H-AB3O-01A-11D-A39S-05     0.8963944    
TCGA-LK-A4O2-01A-11D-A34E-05     0.6942843    
TCGA-MQ-A4LI-01A-11D-A34E-05     0.8882558    

desired output:
TCGA-TS-A7P1-01A    41D-A39S-05    0.8637304    
TCGA-NQ-A57I-01A    11D-A34E-05    0.7812147    
TCGA-3H-AB3O-01A    11D-A39S-05    0.8963944    
TCGA-LK-A4O2-01A    11D-A34E-05    0.6942843    
TCGA-MQ-A4LI-01A    11D-A34E-05    0.8882558    

我试过了:

sapply(strsplit(as.character(df$ID), "-"), '[', 1:4)

然而,上面的输出并不是我想要的。非常感谢。

您第一列的所有元素似乎都具有相同的长度,因此一个简单的方法可能是:

df <- data.frame(col1 = c("TCGA-TS-A7P1-01A-41D-A39S-05","TCGA-NQ-A57I-01A-11D-A34E-05","TCGA-3H-AB3O-01A-11D-A39S-05"),
                 col2 = c(0.8637304,0.7812147,0.8963944), stringsAsFactors = FALSE)

df$col1bis <- substr(df$col1,18,28)
df$col1 <- substr(df$col1,1,16)

然后我重新排列列的顺序:

df <- df[, c(1,3,2)]

导致:

> df
              col1     col1bis      col2
1 TCGA-TS-A7P1-01A 41D-A39S-05 0.8637304
2 TCGA-NQ-A57I-01A 11D-A34E-05 0.7812147
3 TCGA-3H-AB3O-01A 11D-A39S-05 0.8963944

我试过这个,效果很好。

df <- cbind(df[,1],df)
df[,1] <- substr(df[,1],1,16)
df[,2] <- substr(df[,2],18,28)