R:如何分隔数据框对象中的值(例如df [1,1]),用逗号分隔?

时间:2016-08-05 16:51:48

标签: r

我有一个输出数据,每行中每个基因都有多个同种型。异构体用逗号分隔,'。当我将表导入R时,数据框如下所示。

Df:
gene isoform                sample1_read_number        p-value
A    'A1','A2','A3'         0:23,1:12,2:122            0.9,0.01,0.5
B    'B1','B2','B3'         0:3,1:45,2:76              0.43,0.001,0.12
C    'C1','C2','C3','C4'    0:5,1:56,2:166,3:7         0.004,0.002,0.23,0.12
D    'D1','D2'              0:43,1:100                 0.1,0.0003

对于每个基因,有多种同种型。对于每个同种型,我有读数,用逗号分隔(0:23读取A1意味着A1读数是23)和p值用逗号分隔(A1的p值是0.9,A2是0.01)。因此,每个对象中的所有内容都按逗号分隔顺序排列。

例如,当我致电df[1,2]时,结果为[1] 'A1','A2','A3''df[1,4]结果为[1] 0.9,0.01,0.5作为一个对象。我无法想象如何让R在df [X,Y]中分隔这些值。

我想这样做的原因是,我想根据p值或读取数量过滤此数据。为了能够做到这一点,首先我应该能够通过每个同种型来打破这个数据框,为此我需要找到一种方法来分离每个点上的值。

最终数据框应该是这样的(这里仅显示基因A和B):

Df_I:
gene isoform sample1_read_number  p-value 
A    A1      0:23                 0.9
A    A2      1:12                 0.01
A    A3      2:122                0.5
B    B1      0:3                  0.43
B    B2      1:45                 0.001
B    B3      2:76                 0.12

任何人都可以给我创建第二个数据框架的想法吗? 任何帮助都会受到很多赞赏!

干杯! 甲

2 个答案:

答案 0 :(得分:3)

separate_rows函数的tidyr函数是根据您的情况编写的:

tidyr::separate_rows(df, isoform:p.value, sep = ",")

#   gene isoform sample1_read_number p.value
#1     A      A1                0:23     0.9
#2     A      A2                1:12    0.01
#3     A      A3               2:122     0.5
#4     B      B1                 0:3    0.43
#5     B      B2                1:45   0.001
#6     B      B3                2:76    0.12
#7     C      C1                 0:5   0.004
#8     C      C2                1:56   0.002
#9     C      C3               2:166    0.23
#10    C      C4                 3:7    0.12
#11    D      D1                0:43     0.1
#12    D      D2               1:100  0.0003

答案 1 :(得分:1)

可以使用cSplit

中的splitstackshape轻松完成此操作
library(splitstackshape)
na.omit(cSplit(Df, 2:ncol(Df), ",", "long"))
#    gene isoform sample1_read_number p.value
# 1:    A      A1                0:23  0.9000
# 2:    A      A2                1:12  0.0100
# 3:    A      A3               2:122  0.5000
# 4:    B      B1                 0:3  0.4300
# 5:    B      B2                1:45  0.0010
# 6:    B      B3                2:76  0.1200
# 7:    C      C1                 0:5  0.0040
# 8:    C      C2                1:56  0.0020
# 9:    C      C3               2:166  0.2300
#10:    C      C4                 3:7  0.1200
#11:    D      D1                0:43  0.1000
#12:    D      D2               1:100  0.0003