Подмножество большой матрицы на основе кадра данных - PullRequest
2 голосов
/ 08 марта 2019

Я работаю с некоторыми геномными файлами в R. У меня большая матрица, отформатированная, как в примере ниже, где столбцы - это образец, а строки - это гены (в реальной матрице 205 столбцов и более 22 тыс. Строк.

          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 - это тот же идентификатор, который можно найти в первой строке матрицы.

                    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 голосов
/ 08 марта 2019

Спасибо за ваши ответы, они мне очень помогли.Все работает с его двумя строками кода:

hippocampus <- filter(GSMdata, tissue == 'hippocampus')$geo_accession
hippocampus <- data[, hippocamups]
0 голосов
/ 08 марта 2019

Так как имена столбцов в вашей первой матрице совпадают с geo_accession, вы можете использовать последний напрямую для подстановки столбцов:

hippocamups <- your_large_matrix[, your_dataframe$geo_accession[your_dataframe$tissue == "Hippocapmus"] ]
0 голосов
/ 08 марта 2019

Если матрица определила имена столбцов, попробуйте это:

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

Матрица - это ваша матрица, df - это ваш фрейм данных.

Надеюсь, это поможет

0 голосов
/ 08 марта 2019

Я не уверен, что понял ваш вопрос, но если вы хотите установить подкадр данных для другой строки, просто используйте:

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

для данных [1] - это номер столбца в кадре данныхчто вам нужно подмножество

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...