使用R拆分和连接列中的字符串

时间:2014-08-07 12:22:20

标签: r matrix string-split

row.names X33 X40 X46 X50 X60 X80 X90 X100 X130 X200
INTERGENIC-chrI-188881-G-C  0.37    0.41    0.48    0.45    0.47    0.42    0.45    0.44    0.40    0.36    0.36    0.33    0.39
INTERGENIC-chrI-188939-A-G  0.38    0.48    0.56    0.54    0.57    0.45    0.57    0.51    0.49    0.47    0.41    0.38    0.52
INTERGENIC-chrXIII-191990-A-T   0.14    0.15    0.15    0.22    0.16    0.16    0.15    0.31    0.11    0.23    0.12    0.12    0.19
SDS3-chrIX-202625-T-G   0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.33    0.35    0.41    0.50    0.53
INTERGENIC-chrVIII-236987-G-A   0.15    0.34    0.28    0.28    0.22    0.12    0.15    0.25    0.27    0.24    0.13    0.13    0.25
INTERGENIC-chrVIII-236993-T-A   0.12    0.25    0.21    0.19    0.17    0.00    0.00    0.18    0.16    0.17    0.08    0.11    0.12

我有一个带有列名的矩阵[34,11]:

row.names X33 X40 X46 X50 X60 X80 X90 X100 X130 X200 

第一列row.names需要拆分为单独的列:

GENE, CHROMOSOME, POSITION, REF, ALT (INTERGENIC-chrI-188881-G-C)

我目前正在使用R来获得所需的输出。

library(reshape2)    
A <- colsplit(df$row.names, "\\-", names=c("GENE", "CHROMOSOME", "POSITION", "REF", "ALT"))

我想对矩阵中的所有单独行执行此操作。任何人都可以帮我输出一个矩阵,并添加新的列。感谢

1 个答案:

答案 0 :(得分:1)

试试这个:

#dummy data
df <- read.table(text="
Variants    33  40  46  50  60  80  90  100 130 200
ASG1-chrIX-103160-C-T   0   0   0   0   0   0.83    0.49    0   0   0
YNL179C-chrXIV-300948-T-A   0.27    0.32    0.24    0.25    0.23    0.22    0.17    0.16    0.2 0.3
",header=TRUE)

#split columns
temp_df <- 
  do.call(rbind,
          strsplit(as.character(df$Variants),split="-"))
colnames(temp_df) <- c("GENE", "CHROMOSOME", "POSITION", "REF", "ALT")

#result
cbind(temp_df,df[,-1])

# GENE CHROMOSOME POSITION REF ALT  X33  X40  X46  X50  X60  X80  X90 X100 X130 X200
# 1    ASG1      chrIX   103160   C   T 0.00 0.00 0.00 0.00 0.00 0.83 0.49 0.00  0.0  0.0
# 2 YNL179C     chrXIV   300948   T   A 0.27 0.32 0.24 0.25 0.23 0.22 0.17 0.16  0.2  0.3

修改

您提供的代码也适用:

#using reshape2
library(reshape2)
A <- colsplit(df$Variants, "\\-", names=c("GENE", "CHROMOSOME", "POSITION", "REF", "ALT"))

#result
cbind(A,df[,-1])