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

数据帧中第一列中的strsplit中间模式,r,dataframe,split,apply,sapply,R,Dataframe,Split,Apply,Sapply,我有一个数据框,我想将第一列拆分为两列,但单独的模式与其他模式类似,我只想拆分位于数字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 T

我有一个数据框,我想将第一列拆分为两列,但单独的模式与其他模式类似,我只想拆分位于数字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 <- cbind(df[,1],df)
df[,1] <- substr(df[,1],1,16)
df[,2] <- substr(df[,2],18,28)

df-Ty对于编辑,它至少更简单和正确。
arrange
用于对行进行排序。如果您想用
dplyr
更改列顺序,您可以使用
select
,例如:
df%>%select(col1,col1bis,col2)
@prolalistatusmaximus哦,是的,我后面有很多列。所以这一个df如果这是你的固定格式,你可以用这个。然而,这是非常危险的。这里和那里各有一个字符,这将失败。@RonakShah是的,我想是的,还有其他解决方案吗?我试着使用sapply,但我无法解决这个问题,所以我打算这样做。
> 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)