根据数据帧对大矩阵进行分组

时间:2019-03-07 22:21:47

标签: r

我正在使用R中的一些基因组文件。我有一个大型矩阵,格式如下例,其中列是样本,行是基因(实际矩阵有205列,行数超过22k。

          GSM1304852  GSM1304853 GSM1304854 GSM1304855
1007_s_at  2.3945368  2.27518369  2.1611630  1.9641833
1053_at    0.1051084  0.06160802  0.3421762  0.3593916
117_at    -0.4597124 -0.52310349 -0.4436059 -0.6370277
121_at     0.9333566  1.13180904  0.9975700  1.0079778

我还有一个数据帧,格式如下例所示,其中geo_accession是可以在矩阵第一行中找到的相同ID。

                    title geo_accession Age    Disease_State Gender  pH  PMI Race RIN      tissue
GSM1304852 bipolar_hip_10    GSM1304852  52 bipolar disorder      M 6.7 23.5    W 6.3 hippocampus
GSM1304853 bipolar_hip_11    GSM1304853  50 bipolar disorder      F 6.4 11.7    W 6.8 hippocampus
GSM1304854 bipolar_hip_12    GSM1304854  28 bipolar disorder      F 6.3 22.3    W 7.7 hippocampus
GSM1304855 bipolar_hip_13    GSM1304855  55 bipolar disorder      F 6.4 17.5    W 7.6 hippocampus
GSM1304856 bipolar_hip_14    GSM1304856  58 bipolar disorder      M 6.8 27.7    W 7.0 hippocampus
GSM1304857 bipolar_hip_15    GSM1304857  28 bipolar disorder      M 6.2 27.4    W 7.7 hippocampus

我需要对与某个组织相关联的矩阵中的所有列进行子集化(在整个数据框中有3种组织),因此,最后,我需要3个矩阵。

例如:从矩阵中,我只想获取与hippocampus关联的列:

matrix # an R matrix object
DataFrame # an R dataframe

DFhip <- DataFrame[ which(tissue == 'hippocampus',]
GSMlist <- DFhip$geo_accesion

MatrixHip <- matrix[GSMlist,] # I know this is the wrong syntax, it's just to let you understand 

我对R比较陌生,不习惯对矩阵进行子集化。

4 个答案:

答案 0 :(得分:0)

我不确定我是否理解您的问题,但是如果您想为ine行的数据帧子集,请使用:

    data1<-data[data[1] %in% c("GSM1304852","GSM1304855")]

on data [1]是您需要子集化的数据框中的列数

答案 1 :(得分:0)

由于第一个矩阵中的名称与geo_accession相同,因此您可以直接使用后者来对列进行子集化:

hippocamups <- your_large_matrix[, your_dataframe$geo_accession[your_dataframe$tissue == "Hippocapmus"] ]

答案 2 :(得分:0)

如果矩阵已定义了姓氏,请尝试以下操作:

lapply(function(x) {
 matrix[, unique(df$geo_accession[df$tissue == x])]
}, x = unique(df$tissue))

矩阵是矩阵,df是数据框。

希望有帮助

答案 3 :(得分:0)

感谢您的回答,他们对我有很大帮助。一切都可以用他的两行代码来完成:

hippocampus <- filter(GSMdata, tissue == 'hippocampus')$geo_accession
hippocampus <- data[, hippocamups]